`
bollaxu
  • 浏览: 217108 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

accept的Invalid Argument错误

阅读更多

在编写socket程序的时候,遇到一个奇怪的问题,服务端用accept接收请求,客户端通过telnet连接上去。结果每次连上去以后连接又立即断开了,而server端accept以后并没有close连接。

 

代码如下:

/*server*/
int main()
{
	//...
	socklen_t cli_len;
	struct sockaddr_in clientaddr;
	
	while(1)
	{
		int connfd = accept(listenfd, (struct sockaddr *)&clientaddr, &cli_len);
		if(connfd < 0)
		{
			perror("accept");
		}
		
		//...
	}
	
	return 0;
}

 最后发现是初始化的问题,cli_len和clientaddr不能为负值,因为上面没有初始化,所以在accept的时候会出问题。最后加上初始化的代码,问题就解决了。

/*server*/
int main()
{
	//...
	socklen_t cli_len;
	struct sockaddr_in clientaddr;
	
	while(1)
	{
		memset(&clientaddr, 0, sizeof(struct sockaddr_in));
		cli_len = 1;
		int connfd = accept(listenfd, (struct sockaddr *)&clientaddr, &cli_len);
		if(connfd < 0)
		{
			perror("accept");
		}
		
		//...
	}
	
	return 0;
}
 
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics