在 C 中的套接字编程中,我在一个简单的客户端/服务器示例中看到,在调用 之前,将保存套接字文件描述符socket()
的变量设置为 0。int
int fds;
fds = 0;
fds = socket (AF_INET, SOCK_DGRAM, 0);
if (fds == -1) {
perror("Socket():");
exit(-1);
}
这有什么原因吗?
在 C 中的套接字编程中,我在一个简单的客户端/服务器示例中看到,在调用 之前,将保存套接字文件描述符socket()
的变量设置为 0。int
int fds;
fds = 0;
fds = socket (AF_INET, SOCK_DGRAM, 0);
if (fds == -1) {
perror("Socket():");
exit(-1);
}
这有什么原因吗?
不,没有。socket
将始终返回一个值。
只要您fds
在写入变量之前不访问该变量,就没有真正的理由。
但是,如果您在定义和赋值之间有一定的距离,则设置fds
为“无效”值可能会很有用,例如-1
:
int fds = -1;
[ lots of code which might accidentally use fds ]
fds = socket (AF_INET, SOCK_DGRAM, 0);
if (fds == -1) {
perror("Socket():");
exit(-1);
}
现在,想象一下我不小心在和fds
之间的代码中使用了,由于使用无效,我肯定会得到一个错误。int fds = -1;
fds = socket(...)
另一方面,如果我没有设置fds
为-1
,它可能有任何值,也许是我们流程中有效的 FD 值。如果我read()
对这个文件执行操作——或者更糟糕的是:write()`,我可能会以损坏的数据结构结束。