上一篇:Beej's Guide to Network Programming 系列第14篇
既然數據報套接字(Datagram Socket)不需要建立連接,那麼在發送數據包之前,我們必須知道目標地址。這就是 sendto() 和 recvfrom() 兩個函數的用武之地。
int sendto(int sockfd, const void *msg, int len, unsigned int flags,
const struct sockaddr *to, socklen_t tolen);
參數說明:
struct sockaddr 的指針,包含目標 IP 地址和端口。sizeof(struct sockaddr)。返回值:成功返回實際發送的字節數(可能小於請求發送的字節數),失敗返回 -1 並設置 errno。
int recvfrom(int sockfd, void *buf, int len, unsigned int flags,
struct sockaddr *from, int *fromlen);
參數說明:
struct sockaddr 的指針,調用返回後將填入發送方的 IP 和端口。sizeof(struct sockaddr),返回時包含實際地址長度。返回值:成功返回接收到的字節數,失敗返回 -1 並設置 errno。
這兩個函數讓無連接的 UDP 通信成為可能,是網絡編程中處理數據報的基石。
摘自 xiaobin_HLJ80 的專欄