A具有以下侦听器套接字:
int sd = socket(PF_INET, SOCK_STREAM, 0);
struct sockaddr_in addr;
bzero(&addr, sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_port = htons(http_port);
addr.sin_addr.s_addr = INADDR_ANY;
if(bind(sd,(sockaddr*)&addr,sizeof(addr))!=0)
{
...
}
if (listen(sd, 16)!=0)
{
...
}
int sent = 0;
for(;;) {
int client = accept(sd, (sockaddr*)&addr, (socklen_t*)&size);
if (client > 0)
{
...
close(client);
}
}
Run Code Online (Sandbox Code Playgroud)
如果使用
close(sd);
Run Code Online (Sandbox Code Playgroud)
然后尝试使用相同的代码重新创建套接字,发生绑定错误,并且仅在30-60秒后成功创建新套接字.
有没有办法以一些很酷的方式创建或关闭以避免绑定错误?
Phi*_*lip 18
在内核的某个地方,仍然有一些关于你之前的套接字的信息.告诉内核你还是愿意重新使用这个端口:
int yes=1;
//char yes='1'; // use this under Solaris
if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(yes)) == -1) {
perror("setsockopt");
exit(1);
}
Run Code Online (Sandbox Code Playgroud)
有关更详细的说明,请参阅beej的网络编程指南中的bind()部分.
| 归档时间: |
|
| 查看次数: |
27244 次 |
| 最近记录: |