#include <sys/types.h>
#include <sys/socket.h>
int bind(int sockfd,struct sockaddr *my_addr,socket_t addrlen);
注意::
my_addr是自己的网络地址,参看网络地址的实现。//SOCK_STEAM中的Server自己的地址和SOCK_DGRAM中自己的地址。
addrlen = sizeof(struct sockaddr); //直接赋值就可以。
int connect(int sockfd,struct sockaddr *srvaddr,socklen_t address_len);
注意::
srvaddr是server的地址,参看网络地址的实现。
address_len = sizeof(struct sockaddr); //直接赋值就可以了。
下面两个使用到struct sockaddr或struct sockaddr_in的系统调用。
注意::
必须定义一个变量,保存地址变量的长度,即将变量初始化为sizeof(struct sockaddr);
accept和recvfrom函数中的struct sockaddr *参数,都使用保存远程主机的地址信息的。
所以,在使用的时候,必须初始化表示地址长度的变量,即socket_t * 参数。
accept系统调用::
int accept(int sockfd,struct sockaddr *address,socket_t *address_len);
调用这个系统调用后,内核会将*address_len个字节的数据存放到address指定的内存空间中,当存放的数据不足*address_len个字节时,内核会修改*address_len的值。反映出来数据错误。
因为内核会使用到*address_len的值,所以在使用前,必须将*address_len初始化为sizeof(struct sockaddr);
recvfrom系统调用::
ssize_t recvfrom(int sockfd,void * buf,size_t length,int flags,struct sockaddr *address,socklen_t *address_len);
注意,其中的flags一般使用为0;
调用这个系统调用后,内核会将*address_len个字节的数据存放到address所指定的内存空间中,当存放的数据不足*address_len个字节时,内核会修改*address_len的值。反映出来数据错误。
因为内核会使用到*address_len的值,所以在使用前,必须就爱你个*address_len初始化为sizeof(struct sockaddr);
getpeername系统调用::
int getpeername(int sockfd,struct sockaddr *address,soklen_t &address_len);
sockfd是你想去的远程信息的sockfd,比如accept创建的sockfd;
addr是一个strcut sockaddr *或struct sockaddr_in *的指针;
addrlen是一个指向int的指针,在使用前,必须初始化成sizeof(struct sockaddr);
address_len必须赋值的原因是::
调用这个系统调用后,内核会将*address_len个字节的数据存放到address所指定的内存空间中,当存放的数据不足*address_len个字节时,内核会修改*address_len的值。反映出来数据错误。
因为内核会使用到*address_len的值,所以在使用钱,必须就爱你个*address_len初始化为sizeof(struct sockaddr);