2 ajosion ajosion 于 2017.01.14 18:46 提问

网络编程 循环服务器accept()阻塞问题。

for ( ; ; ) {
clilen = sizeof(cliaddr);
connfd = accept(listenfd, (struct sockaddr*)&cliaddr, &clilen);
printf("Connect successed!"); /* process the request */
close(connfd);
}
像上面这个函数 即使客户端连接成功printf函数也不会输出
而如果把循环去掉 进程好像就不会再阻塞 printf函数就能输出
accept函数从连接队列中取一个连接后进程不应该是非阻塞状态 那么作为循环体的时候 printf函数为什么不能输出呢

1个回答

wf_it_life
wf_it_life   2017.01.16 11:35

楼主对缓存一点都不了解吗?printf()是行缓存,也就是说要么遇到换行符号\n,要么printf缓存达到1024字节,要么调用fflush()。要不然缓存是不会释放

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
网络编程:epoll、accept触发模式及阻塞方式的选择
select(),poll()模型都是水平触发模式,信号驱动IO是边缘触发模式,epoll()模型即支持水平触发,也支持边缘触发,默认是水平触发 从表象看epoll的性能最好,但是在连接数少,并且连接都十分活跃的情况下,select和poll的性能可能比epoll好,毕竟epoll的通知机制需要很多回调函数来完成。epoll工作在两种触发模式下: Level_triggered(水平触发):当
Windows网络编程:阻塞模式下的Socket编程
Windows Socket是从UNIX Socket继承发展而来,在写本博客时最新的版本是2.2。进行Windows网络编程,你需要在你的程序中包含WINSOCK2.H或MSWSOCK.H,同时你需要添加引入库WS2_32. LIB或WSOCK32.LIB。
c++ socket编程中accept阻塞问题
在用c++编写socket代码时,出现了,accept不阻塞的问题,感觉很是苦恼,一直查找问题,发现代码时没有问题的。最终发现把#include <thread> #include <mutex>屏蔽掉可以解决,当时就在想为什么出现这种情况呢,后来,在大神的指点下,发现,这是因为在使用using namespace std;出现的错误,所以希望大家尽量不要使用using namespace st
网络编程socket accept函数的理解
在服务器端,socket()返回的套接字用于监听(listen)和接受(accept)客户端的连接请求。这个套接字不能用于与客户端之间发送和接收数据。   accept()接受一个客户端的连接请求,并返回一个新的套接字。所谓“新的”就是说这个套接字与socket()返回的用于监听和接受客户端的连接请求的套接字不是同一个套接字。与本次接受的客户端的通信是通过在这个新的套接字上发送和接收数
读Socket流时产生阻塞的解决方案
在用socket写一个服务器时遇到了问题于是将主要的问题抽了出来,代码如下,由于代码很简单于是也没有注释。public class Main { private static ServerSocket serverSocket; private final static ExecutorService exec = Executors.newFixedThreadPool(30);
TCP网络编程中connect()、listen()和accept()三者之间的关系
基于 TCP 的网络编程开发分为服务器端和客户端两部分,常见的核心步骤和流程如下:connect()函数对于客户端的 connect() 函数,该函数的功能为客户端主动连接服务器,建立连接是通过三次握手,而这个连接的过程是由内核完成,不是这个函数完成的,这个函数的作用仅仅是通知 Linux 内核,让 Linux 内核自动完成 TCP 三次握手连接(三次握手详情,请看《浅谈 TCP 三次握手》),最...
java网络编程中的read阻塞问题
Socket的可写状态和可读状态。当输出缓冲区未满时,Socket是可写的(注意,不是对方启用接收操作后,本地才能可写,这是错误的理解),因此,当套接字被建立时,即处于可写的状态。对于可读,则是指缓冲区中有接收到的数据,并且这些数据未完成处理。在socket创建时,并不处于可读状态,仅当连接的另一方向本套接字的通道写入数据后,本套接字方能处于可读状态(注意,如果对方套接字已经关闭,那么本地套接字将处
Accept阻塞怎么办?,
Accept阻塞时,导致监听socket不能释放问题的解决方法:   采用Accept线程,专门开个线程去接收,在网络编程中,就是在receive端线程中开个accept线程去接收,可以解决阻塞问题,因为父线程结束了,子线程会被操作系统回收,不用我们做了,当然我们线程不能开太多,否则会出现malloc申请内存都出错。 部分代码说明: //采用accept线程 if (flag)
【Linux网络编程】TCP网络编程中connect()、listen()和accept()三者之间的关系
基于 TCP 的网络编程开发分为服务器端和客户端两部分,常见的核心步骤和流程如下: connect()函数 对于客户端的 connect() 函数,该函数的功能为客户端主动连接服务器,建立连接是通过三次握手,而这个连接的过程是由内核完成,不是这个函数完成的,这个函数的作用仅仅是通知 Linux 内核,让 Linux 内核自动完成 TCP 三次握手连接(三次握手详情,请看《浅
python的HttpServer出现socket.accept()阻塞卡死
最近想用python做一个我微信公众号的后台,结果发现,服务器刚启动的一个多小时微信发的消息是有回复,但过几个小时之后,所有给服务器发现的请求都没有回复了,找了两天问题,昨晚上还弄半夜3点。总算把问题给解决了。服务器用的是下边这个类:class ThreadedHTTPServer(ThreadingMixIn, HTTPServer):和一个处理http各种do_请求的Handler:class