基于UDP连接的socket编程有关问题, 多线程的时候靠什么来定位不同连接

基于UDP连接的socket编程问题, 多线程的时候靠什么来定位不同连接?
在TCP连接的多线程socket编程里, 我可以用accept来定位不同的连接, 然后凭借不同的accept来分配新的thread给新加入的连接.
如下所述: 

    while (1) {
        newsock = accept(listensock, NULL ,NULL);
result = pthread_create(&thread_id, NULL, thread_proc, (void *) newsock);
if (result != 0) {
  printf("Could not create thread.\n");
  return 0;
}
pthread_detach(thread_id);


但是, UDP里, 只有bind, 没有accept, 我该用什么来实现类似上述TCP代码段中的accept() 的定位功能呢? 
我试图直接用new =recvfrom (listensock,null ,null); 来做, 但是失败了. 不行...

谢谢大家.

------解决方案--------------------
通过互斥体实现线程同步吧
------解决方案--------------------
  TCP写多线程,不用每一个套接字都分配一个线程啊,你可以创建一个子线程专门处理接受数据,主线程用来发送数据,一个线程就可以了;至于套接字的管理,如果你是windows可视化开发的话,用WSAAsyncSelect模型开发比较简单;
  UDP开发其实就是比TCP少了一个监听连接的过程,函数改动一下,其它基本上都可以不变;
------解决方案--------------------
引用:
引用:

每次有新ip客户连接,记录ip,并分配一个线程,ip和线程句柄一一对应
接收线程负责接收所有客户,检查ip,通过消息或队列分发给对应的客户线程


悲剧是客户都是同一个IP.....哭


没啥,一般不正规的才用ip对应线程;
正规的都有个登陆,然后每发一包都带个包头
增加这点儿代码还是很必要的
------解决方案--------------------

服务端,在主线程中,创建新线程并且分配新的端口号,将这个端口号回复给客户,后续的UDP通信通过新的端口。标识就是新的端口号。这是个成熟的做法,参考一下。
------解决方案--------------------
UDP包中存下客户端的信息,在客户登录的时候服务器只要记录客户端的属性
当第二次此客户端在来信息,服务器就可以通过遍历在线用户信息表来分包是哪个用户了(即你说的分辨哪条连接了)。
客户信息表是全局的,至于你说的那个多线程根本没有影响,只需遍历与同步,这都是题外话了