这里有研究LINUX网络编程的吗?该怎么处理

这里有研究LINUX网络编程的吗?
在这里
看到介绍LINUX下面的网络编程的一个模型 Epoll.
作者有给出一个EXAMPLE CODE.

小弟对于这些不太懂,所以就把程序编译,然后测试。
当然我的测试端是 windows的,只是简单的测试,发现一些问题。 
请看下面的测试CODE。

void CTestDlg::OnBnClickedButton1()
{
//创建十个线程去连接,这个BUTTON多点几次就会出问题,服务端显示连接超时.
//但是我把线程数由十个改为100个,点了十多次也没有问题,这个是啥情况……。
HANDLE hand[10];
for (int x=0;x<10;x++)
{
hand[x]=CreateThread(NULL,NULL,(LPTHREAD_START_ROUTINE)&SockClientThread,(LPVOID)(x),NULL,NULL);
}
WaitForMultipleObjects( 10 , hand , TRUE , INFINITE );
}
void SockClientThread(LPVOID lPvoid)
{
#define PORT  3333
#define MSGSIZE  1024
char recvBuf[MSGSIZE]="10.12.18.5";

SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);//tcp 

SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=inet_addr(recvBuf);
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(PORT);
TRACE("Connect to %s %d\n",recvBuf,lPvoid);
if(connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR)))//connect to server.
{TRACE("connect Timer Server Fail.\n");return;}

sprintf_s(recvBuf,sizeof(recvBuf),"Thread %d",lPvoid);
send(sockClient,recvBuf,strlen(recvBuf),0);
TRACE("Ready To Reve data %d\n",lPvoid);
recv(sockClient,recvBuf,MSGSIZE,0);//recv data.
closesocket(sockClient);//close remoteconnect.

TRACE("Get Buffer =>%s =>thread:%d\n",recvBuf,lPvoid);
}

问题是.
//创建十个线程去连接,这个BUTTON多点几次就会出问题,服务端显示连接超时.
//但是我把线程数由十个改为100个,点了十多次也没有问题,这个是啥情况……。

------解决方案--------------------
Windows不用创建那么多线程,用select就行,这有socket例子:
http://download.csdn.net/detail/geoff08zhang/4571358
------解决方案--------------------
为什么是服务端超时,这个没听过,我假设是客户端连接超时。
100个的时候,已经创建了几千个线程,没有出问题会不会是假像?
你这几行代码看不出有什么问题,我估计是服务端的问题。
------解决方案--------------------
    我编LINUX上的网络程序时,LINUX下的服务器程序是侦听后,有一个客户端来连接我就新建立一个进程进行片理这个连接,而且新的连接到来时先判断是不是这个客户端先前已建立一个连接了,如果已建立一个连接,就先删除这个连接(结束进程),然后再重新建立这个客户的连接.
    所以你说你建立两个线程来处理客户端,这个除非只有两个客户端才行,但你也得把这两个客户端安排到两个线程才行,不能把两个客户端的连接都放进一个线程里,这样你只能和一个客户端(最后一个连接)进行通信地址,而先前的客户端则不能再通信了
------解决方案--------------------
可以打log么?
------解决方案--------------------
这里有研究LINUX网络编程的吗?该怎么处理
linux 和win 网络编程 毫无压力.
对linux的epoll倒研究过,但封装貌似不够高效,应该是我理解哪里有误