int accept(int sock, struct sockaddr * addr, int* addrlen)
addrlen:初始指明为addr的大小,调用返回时为存储在addr中的字节数 ### close() 终止通信,删除套接字,任何正在套接字上等待被读取的数据都将被抛弃。 linux使用了引用计数机制,可以多个进程共享一个套接字。close每被调用一次,引用计数减1,引用计数为0时才释放。int close(int sock)
成功时返回0 ### shutdown() 部分关闭连接int shutdown(int sock,int direction )
direction:0,终止进一步输入;1,终止进一步输出;2,终止输入和输出 ## 辅助函数 ### 整数转换 TCP/IP协议首部使用的二进制采用网络字节顺序(表示整数时,最高字节在前) 为了机器和网络字节顺序兼容,应当始终调用转换函数htons(host to network short)
ntohs
htonl
ntohl
serv_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
```
接收ASCII字符串域名,返回hostent结构,定义在<netdb.h>中
struct hostent { char* h_name, //正式主机名 char** h_aliases, //其他别名列表 int h_addrtype, //地址类型 int h_length, //地址长度 char** h_addr_list //一般主机可以有多个ip地址,h_addr_list用来 保存多个ip地址 } #define h_addr h_addr_list[0] //为了与早期的版本兼容
由服务名字得到熟知端口getservbyname成功则返回一个servent结构指针,发生差错就返回空指针,结构定义在<netdb.h>中
servent* getservbyname(char\* name, char\* proto)struct servent
{
char* s_name; //正式服务名
char** s_aliases; //其他别名列表
int s_port; //该服务使用的端口
char *s_proto; //服务器所用的协议
};
```
成功就返回protoent结构指针,结构定义在<netdb.h>中
struct protoent { char\* p_name; //协议正式名 char\*\* p_aliases; //协议的别名列表 int p_proto; //正式协议名 }
获取主机名字gethostname以字符串形式返回主机名
int gethostname(char\* name, namelen)name:放置名字的字符数组的地址
获取远程端点地址getpeername需要已经建立链接
int getpeername(int sock, sockaddr\* remaddr, int\* addrlen)remaddr:含有对端地址的sockaddr指针
addrlen:调用前为第二个参数的长度,调用后为远程端点地址的实际长度