首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

请见者给出答案,谢谢

2012-12-31 
请见者给出答案,多谢!问题描述:我在主函数中创建一个线程,而在线程中又创建了一个网络套接字,用于网络连接

请见者给出答案,多谢!
问题描述:我在主函数中创建一个线程,而在线程中又创建了一个网络套接字,用于网络连接,可是在使用下面方式时的效果为什么不同?
方式一:
if(-1==(acceptfd2=accept(socketfd2,(struct sockaddr*)&caddr,&length)))
使用这一条语句时,编译能过,但与客户端连接时,出现错误:Invalid argument

方式二:
  if(-1==(acceptfd2=accept(socketfd2,NULL,NULL)))
   没问题
[解决办法]
length需要预先赋值为sizeof(struct sockaddr_in)
[解决办法]

引用:
谢谢你的回答,问题到是解决。
但是我还有一个疑问:如果我是在主函数中使用if(-1==(acceptfd2=accept(socketfd2,(struct sockaddr*)&caddr,&length)))这条语句,不对length赋值,也是没问题的!
                    为什么在线程中使用就需要对其赋值呢?
        ……

accept使用时必须预先设定length值。
没设置的情况下属于“未定义”行为。
[解决办法]
length如果没被初始化,则若恰好length里面的随机值恰好 > sizeof(struct sockaddr_in),则accept没问题。
反之,则出错。
[解决办法]
length里面的随机值恰好 >= sizeof(struct sockaddr_in)

热点排行