在C语言的套接字编程中,我在一个简单的客户端/服务器示例中看到,在调用socket()
之前,将保存套接字文件描述符的int
变量设置为0。
int fds;
fds = 0;
fds = socket (AF_INET, SOCK_DGRAM, 0);
if (fds == -1) {
perror("Socket():");
exit(-1);
}
这有什么理由吗?
答案 0 :(得分:3)
不,没有。 socket
将始终返回一个值。
答案 1 :(得分:1)
只要您在写入之前没有访问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()
- 或者更糟糕的是:写一个()`,我可能会以损坏的数据结构结束。