socklen_t clilen;
struct sockaddr_in clientaddr;
connfd = accept(listenfd,(sockaddr *)&clientaddr,&clilen);
问题就出在accept的第3个参数:必须为正数,把那个变量初始化一下就好了~
socklen_t clilen= sizeof(struct sockaddr);
struct sockaddr_in clientaddr;
connfd = accept(listenfd,(sockaddr *)&clientaddr,&clilen);
BTW:另外一篇文章里面提到出现这种问题的情况。
参考:
http://freebsd.monkey.org/freebsd-hackers/200509/msg00095.html
http://blog.chinaunix.net/u1/43206/showart_498386.html
struct sockaddr_in clientaddr;
connfd = accept(listenfd,(sockaddr *)&clientaddr,&clilen);
问题就出在accept的第3个参数:必须为正数,把那个变量初始化一下就好了~
socklen_t clilen= sizeof(struct sockaddr);
struct sockaddr_in clientaddr;
connfd = accept(listenfd,(sockaddr *)&clientaddr,&clilen);
BTW:另外一篇文章里面提到出现这种问题的情况。
出错情况1: 在参数1处出错,多半情况是sockfd值非法,也即是没有绑定(bind),监听(listen)或者是负值等等;
出错情况2:在参数3处出错,没有给addrlen传入合法的值,或者是没有初始化(addrlen
= sizeof(addr))
参考:
http://freebsd.monkey.org/freebsd-hackers/200509/msg00095.html
http://blog.chinaunix.net/u1/43206/showart_498386.html
本文介绍了在使用accept函数时常见的两种错误及其解决方案。一种是在第一个参数中出现的问题,通常是因为socket未正确绑定或监听。另一种是在第三个参数中出现的问题,这通常是由于没有正确初始化地址长度变量。文章还提供了正确的初始化示例。

2056

被折叠的 条评论
为什么被折叠?



