这两个用来通讯的函数是透过 stream socket 或 connected datagram ssocket。若你想要使用常规的 unconnected datagram socket,你会需要参考底下的 sendto() 及 recvfrom() 的章节。
send() 调用:
int send(int sockfd, const void *msg, int len, int flags);
char *msg = "Beej was here!";
int len, bytes_sent;
.
.
.
len = strlen(msg);
bytes_sent = send(sockfd, msg, len, 0);
.
.
.
send() 会返回实际有送出的 byte 数目,这可能会少於你所要传送的数目!有时候你告诉 send() 要送整笔的资料,而它就是无法处理这麽多资料。它只会尽量将资料送出,并认为你之後会再次送出剩下没送出的部分。
要记住,如果 send() 返回的值与 len 的值不符合的话,你就需要再送出字串剩下的部分。好消息是:如果数据包很小[比 1K 还要小这类的],或许有机会一次就送出全部的东西。
一样,错误时会返回 -1,并将 errno 设置为错误码(error number)。
recv() 调用在许多地方都是类似的:
int recv(int sockfd, void *buf, int len, int flags);