关于使用listen的有关问题想请问一下

关于使用listen的问题想请教一下
我想请问一下,做TCP的通信应用程序,这里想做到这样的效果
1.创建socket(listensocket)
2.调用listen
3.将listensocket放如select队列,进行select操作
4.判断是不是listensocket可读,是的话用accept生成新socket(acceptsocket),并将acceptsocket放入select队列
5.看select队列中的其他描述符是否可读,并做相应处理
6.回到1

以上的流程在6以后是否还会有两个地方会有阻塞,2和3
请问有没办法只在3这里才阻塞

------解决方案--------------------
流程不对
1、创建socket
2、listen
3、accept
4、返回3
------解决方案--------------------
从6回到4
------解决方案--------------------
NAME

listen - listen for socket connections and limit the queue of incoming connections

SYNOPSIS


#include <sys/socket.h>

int listen(int socket, int backlog);

DESCRIPTION

The listen() function marks a connection-mode socket, specified by the socket argument, as accepting connections, and limits the number of outstanding connections in the socket 's listen queue to the value specified by the backlog argument.

If listen() is called with a backlog argument value that is less than 0, the function sets the length of the socket 's listen queue to 0.

The implementation may include incomplete connections in the queue subject to the queue limit. The implementation may also increase the specified queue limit internally if it includes such incomplete connections in the queue subject to this limit.

Implementations may limit the length of the socket 's listen queue. If backlog exceeds the implementation-dependent maximum queue length, the length of the socket 's listen queue will be set to the maximum supported value.

The socket in use may require the process to have appropriate privileges to use the listen() function.

RETURN VALUE

Upon successful completions, listen() returns 0. Otherwise, -1 is returned and errno is set to indicate the error.

ERRORS

The listen() function will fail if:

[EBADF]
The socket argument is not a valid file descriptor.
[EDESTADDRREQ]
The socket is not bound to a local address, and the protocol does not support listening on an unbound socket.
[EINVAL]
The socket is already connected.
[ENOTSOCK]
The socket argument does not refer to a socket.
[EOPNOTSUPP]
The socket protocol does not support listen().

The listen() function may fail if:

[EACCES]
The calling process does not have the appropriate privileges.
[EINVAL]
The socket has been shut down.
[ENOBUFS]
Insufficient resources are available in the system to complete the call.

SEE ALSO

accept(), connect(), socket(), <sys/socket.h> .