accept返回0

同事的代码开发服务器的时候, accept发现返回总是0.

根据socket编程accept返回值为0,是否正常?. 说的, 发现真的是由于逻辑问题 将 标准输入关闭了导致的.

标准输出关闭后, 所有accept返回为0, 0可以作为正常的套接字使用, 网络连接信息正常.

普通的程序,如果没有关0-标准输入, 1-标准输出,2-标准错误. 那么应该是从3开始计算. 如果关了, 那么0-1-2被使用是正常的, 不要慌.

accept 如果失败, 会返回-1.


参考:

阅读终点,创作起航,您可以撰写心得或摘录文章要点写篇博文。去创作
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在Socket编程中,accept()函数用于接受客户端的连接请求并创建一个新的套接字来处理该连接。这个函数通常在服务器端使用,用于接受客户端的连接并返回一个新的套接字描述符,通过这个新的套接字可以与客户端进行通信。 在C语言中,accept()函数的原型如下: ```c int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen); ``` 其中,sockfd是服务器端已经绑定的套接字描述符,addr和addrlen用于存储客户端的地址信息,如果不关心客户端的地址信息可以设置为NULL。 以下是一个简单的使用accept()函数的示例: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> int main() { int sockfd, new_sockfd; struct sockaddr_in server_addr, client_addr; socklen_t client_len; char buffer[1024]; // 创建套接字 sockfd = socket(AF_INET, SOCK_STREAM, 0); if (sockfd == -1) { perror("socket"); exit(1); } // 设置服务器地址结构体 server_addr.sin_family = AF_INET; server_addr.sin_port = htons(8080); // 绑定端口号8080 server_addr.sin_addr.s_addr = INADDR_ANY; // 绑定套接字 if (bind(sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1) { perror("bind"); exit(1); } // 监听套接字 if (listen(sockfd, 5) == -1) { perror("listen"); exit(1); } printf("Waiting for incoming connections...\n"); // 接受客户端连接 client_len = sizeof(client_addr); new_sockfd = accept(sockfd, (struct sockaddr *)&client_addr, &client_len); if (new_sockfd == -1) { perror("accept"); exit(1); } printf("Client connected!\n"); // 在新的套接字上进行通信操作 // ... return 0; } ``` 以上示例中,首先创建了一个套接字sockfd并绑定在特定的地址上。然后调用listen()函数将该套接字设置为监听状态,允许最多5个连接请求排队等待处理。接下来调用accept()函数,该函数会一直阻塞,直到有客户端连接请求到达。一旦有连接请求到达,accept()函数会返回一个新的套接字描述符new_sockfd,通过这个新的套接字可以与客户端进行通信。 注意:实际使用中,可能需要在循环中不断调用accept()函数接受多个客户端的连接请求,并为每个客户端创建一个新的线程或进程来处理连接。 希望能对你有所帮助!如果还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HockerF

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值