现在,我正在尝试setsockopt()
使用以下代码指定选项:
// bind socket
// Use setsockopt() function to make sure the port is not in use
int yes = 1;
setsockopt(TCPSocket, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int));
setsockopt(TCPSocket, SOL_SOCKET, SO_RCVTIMEO, (char *)&tv,sizeof(struct timeval));
status = bind(TCPSocket, host_info_list->ai_addr, host_info_list->ai_addrlen);
if (status == -1) std::cout << "bind error" << std::endl ;
// listen for connections
status = listen(TCPSocket, 5);
if (status == -1) std::cout << "listen error" << std::endl ;
int new_sd;
struct sockaddr_storage their_addr;
socklen_t addr_size = sizeof(their_addr);
new_sd = accept(TCPSocket, (struct sockaddr *)&their_addr, &addr_size);
if (new_sd == -1) std::cout << "listen error" << std::endl ;
注意tv
是一个已经指定的时间。
当我只打第一个setsockopt()
电话时,一切正常。但是,添加第二个(不返回任何错误)后,我遇到了代码中指定的第二个“监听错误”。我不确定为什么设置超时值会影响这一点,有人可以解释一下吗?
我不相信指定的代码;它是根据此处教程中提供的代码修改的:http: //codebase.eu/tutorial/linux-socket-programming-c/