日期:2014-05-16  浏览次数:20601 次

linux网络编程的问题
能不能让服务端先去干点别的事,如果客户端发送数据到socket,服务端再立刻响应?

------解决方案--------------------
使用多线程异步处理了。
------解决方案--------------------
一般服务器accept后就一直处于睡眠状态,等待客户端请求。
如果楼主想让服务器在这期间做些别的事,应该考虑使用多线程!起码在结构上很清晰!

我就知道这么多了,做等大牛解答!
------解决方案--------------------
I/O复用。


------解决方案--------------------
楼主搜索 epoll + 多线程
------解决方案--------------------
并发服务器吧,,select,多线程,多进程都可以的吧。。
------解决方案--------------------
TCP EPOLL 或者 select 等模型都可以实现。但是你还是要开个线程监听事件
------解决方案--------------------
socket你没有设置为非阻塞, 

static int make_socket_non_blocking (int sfd)
{
int flags, s;

flags = fcntl (sfd, F_GETFL, 0);
if (flags == -1)
{
perror ("fcntl");
return -1;
}

flags 
------解决方案--------------------
= O_NONBLOCK;
s = fcntl (sfd, F_SETFL, flags);
if (s == -1)
{
perror ("fcntl");
return -1;
}

return 0;
}

------解决方案--------------------
套接字设置为非阻塞后, 你要判断 recv send函数的返回值 <0 并不代表网络出错, 还要判断错误代码才能确定是否真的出错。 祝你好运。。
------解决方案--------------------
可以的,先调用fcntl函数设置套接字为非阻塞的情况,然后可以通过IO多路复用,例如select、poll进行接受和发送客户端信息