Tag: 网络

如何在没有libcurl的情况下在C中发出HTTP get请求?

我想编写一个C程序来生成Get Request而不使用任何外部库。 这可能只使用C库,使用套接字吗? 我正在考虑制作一个http数据包(使用正确的格式)并将其发送到服务器。 这是唯一可能的方式还是有更好的方法?

如何将套接字重置为阻塞模式(在我将其设置为非阻塞模式后)?

关于将套接字设置为非阻塞模式,我已经读过这个。 http://www.gnu.org/software/libc/manual/html_mono/libc.html#File-Status-Flags 这是我做的: static void setnonblocking(int sock) { int opts; opts = fcntl(sock,F_GETFL); if (opts < 0) { perror("fcntl(F_GETFL)"); exit(EXIT_FAILURE); } opts = (opts | O_NONBLOCK); if (fcntl(sock,F_SETFL,opts) < 0) { perror("fcntl(F_SETFL)"); exit(EXIT_FAILURE); } return; } 如何将套接字设置回阻止模式? 我没有看到O_BLOCK标志? 谢谢。

在进程退出时释放绑定端口

如何确保在进程退出时正确释放绑定到端口的套接字,以便在没有使用EADDRINUSE的bind()失败的情况下重用端口? 我写了一个小程序,它只创建一个套接字,将它绑定到一个固定的端口,等待连接,然后立即终止。 当我重新运行程序时, bind()调用因EADDRINUSE而失败,但如果我等待几分钟,它就会成功。 有没有办法可以明确地“取消绑定”套接字,从而释放端口号?

TCP连接打开后是否会移动到另一个端口?

如果TCP套接字服务器在端口28081上侦听传入连接,然后接受连接并开始接收数据。 数据进入的端口是28081还是端口被更改。 例如,下面的伪代码中传入数据的端口是什么? 它仍然是28081还是操作系统分配了一个新端口?: bind listen (on port 28081) while 1 fd = accept fork if child process incoming data

GCC的__attribute __((__ packed__))是否保留原始排序?

目的 我正在用C编写一个网络程序(特别是gnu89 ),我想通过将某个struct X重新解释为大字节数组(也就是char ),通过网络发送字节,并将它们重新解释为struct X来简化事情。另一边。 为此我决定使用gcc的__attribute __((__ packed__))。 我已尽力确保正确完成(即我已经考虑了字节序和其他相关问题)。 题 除了保证struct X尽可能小,gcc是否保证使用__attribute __((__ packed__))定义的struct保留原始排序? 我已经做了相当多的搜索,我还没有找到关于这种保证是否存在的任何文件。 笔记 可以安全地假设发送方和接收方都不会遇到可移植性问题(例如服务器上的sizeof(int)等于客户端上的sizeof(int) )。