读书人

socket的异常

发布时间: 2012-02-17 17:50:41 作者: rapoo

socket的错误
环境:ubuntu6.06 gcc4.0.0
我打算做一个多线程并发的socket数据传送,客户端多个线程同时发送数据,服务端对应每个连接产生一个线程进行处理,在这里出现一个问题,就是服务端总会接到一个空的连接(就是客户端与服务端连接上了,也向服务端发数据了,但服务端只收到一个空的数据,我用ethereal抓包时看到客户端发出的数据了)于是我试着修改,当服务端收到空数据时,返回客户端一个标识,要求重发,服务端等待一秒后再重读,可是又出现另一个错误服务端会出现下现两个错误,然后就段错误,晕了!,请哪位大大帮忙指点一下,是我的思路有问题,还是我的写法有问题。
服务端出现的错误:在这个之后就会‘段错误’
Connection reset by peer
Bad file descriptor

下面的是代码(可编译执行):

[解决办法]
int servfd, clifd;//你这是全局变量

clifd = accept(servfd,(struct sockaddr*)&cliaddr,&length);//原来的被覆盖,变成几个线程都使用
同一个clifd.
if (clifd < 0)
{
printf( "error comes when call accept!\n ");
continue;
}


pthread_create(&pthid[i],NULL, pthoper, NULL);//你的i值在那变的?//接收到一个新邻接后会出现什么情况,覆盖原来进程号?
[解决办法]
signal(SIG_PIPE,SIG_IGN);
可以避免SEND生

读书人网 >C语言

热点推荐