问题:客户端connect成功但是服务端accept()函数返回-1问题
hongxi.zhu 2023-11-17
现象:当客户端运行时,客户端connect
方法return 0
成功,但是服务端accept
方法会return -1
,使用perror()
打印出具体报错为Invalid argument
.
原因:
头文件#include <sys/socket.h>
定义:int accept(int sockfd, struct sockaddr* addr, socklen_t *addrlen)
- sockfd非法(这个fd没经过前面的bind、listen等流程或者为负值)
- addrlen非法 (这个变量没初始化,它不能为负值)
解决:
第一种情况就需要排查前面的bind、listen
等方法异常时是否也往下走了,要及时退出
第二种情况定义addrlen
时需要初始化这个变量,如:
socklen_t addrlen= sizeof(struct sockaddr);