c - Linux : socket and binding issues

标签 c sockets

客户端的函数close(socket)的返回值,服务器端得到的是哪个? 每次我从客户端关闭连接时,我的服务器也会关闭,当我尝试重新打开它时,我得到: Bindind 套接字错误:地址已在使用中。

但是我在我的服务器中使用了这个功能:

n = read(newsockfd, buffer, sizeof(buffer));
if (n < 0) errore("Errore lettura Socket");
if (n == 0) 
                  { 
int true = 1;
setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,&true,sizeof(int));
shutdown(sockfd, SHUT_RDWR);
close(sockfd);

}

最佳答案

要允许重新绑定(bind)到同一地址,必须在创建服务器套接字后、但在 bind() 之前启用 SO_REUSEADDR 选项进行 调用,因为实际上是对 bind 的调用,它实际上尝试将新创建的套接字附加到其预期的 IP 地址和端口,即

s = socket(...);
result = setsockopt(s, SO_REUSEADDR, ...);
result = bind(s, ...);

关于c - Linux : socket and binding issues,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45442655/

相关文章:

c - "int *(*pfp) ();"在 C 中做什么?

php - 在 socket_read 上设置超时

java - ActionScript 服务器和 Java 客户端之间通过套接字发送对象

c - 在 Linux 内核(模块编程)中如何从多线程进程中获取 threadids?

Java 套接字 - java.net.ConnectException : Connection refused: connect

iphone - Iphone上的TCP套接字

Java套接字编程: Detect whether client and server are connected

c - C mmap 和 numpy memmap 之间的差异

ruby-on-rails - 如何将 Ruby C 扩展添加到 Rails 应用程序中?

ios - 检测音频文件中的低频音调