一般udpsocket 是不用调用connect函数的,那么在什么时候需要调用connect呢,或者说connect的作用是什么呢?
套接字类型 write/send 不指定目的地址的sendto 指定目的地址的sendto
tcp套接字 可以 可以 EISCONN
udp套接字(已连接) 可以 可以 EISCONN
udp套接字(未连接) EDESTADDRREQ EDESTADDRREQ 可以
udp connect 可以调用tcp的recv或send()函数
下面内容转自:
标准的udp客户端开了套接口后,一般使用sendto和recvfrom函数来发数据,最近看到ntpclient的代码里面是使用send函数直接法的,就分析了一下,原来udp发送数据有两种方法供大家选用的,顺便把udp的connect用法也就解释清楚了。
方法一:
socket----->sendto()或recvfrom()
方法二:
socket----->connect()----->send()或recv()
首先从这里看出udp中也是可以使用connect的,但是这两种方法到底有什么区别呢?首先把这四个发送函数的定义列出来:
int send(int s, const void *msg, size_t len, int flags);
int sendto(int s, const void *msg, size_t len, int flags,
const struct sockaddr *to, socklen_t tolen);
int recv(int s, void *buf, size_t len, int flags);