您的位置:首页 > 理论基础 > 计算机网络

linux网络编程基础API

2016-07-13 21:45 405 查看


创建socket

函数原型:

int socket(int domain, int type, int protocol);


函数功能

创建一个可读、可写、可控制、可关闭的文件描述符,调用成功返回socket,失败返回-1。

参数解释:

domain : 使用哪个底层协议族

type : 指定服务类型

protocol : 设置为0,表示默认协议

命名socket

函数原型

int bind(int sockfd, const struct sockaddr* my_addr, socklen_t addrlen);


函数功能

将my_addr所指的socket地址分配给未命名的sockfd,成功返回0,失败返回-1并设置errno(EACCES或EADDRINUSE)。

参数解释

my_addr:TCP/IP协议族又sockaddr_in和sockaddr_in6两个专用socket地址结构体,其中保存地址族,端口号等信息,在传参时转换为sockaddr类型。

监听socket

函数原型

int listen(int sockfd, int backlog);


函数功能

创建一个监听队列以存放待处理的客户连接,成功返回0,失败返回-1并设置errno。

参数解释

sockfd: 指定被监听的socket

backlog:提示内核监听队列的最大长度,典型值为5,监听队列如果超过backlog,服务器不受理新的客户连接。

接受连接

函数原型

int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);


函数功能

从listen监听队列中接受一个链接,成功返回一个新的socket,该socket唯一标识了被接受的这个连接

参数解释

addr:用来获取被接受连接的远端socket地址。

发起连接

函数原型

int connect(int sockfd, const struct sockaddr *serv_addr, socklen_t addrlen);


函数功能

客户端通过这个函数主动与服务器建立连接(服务器通过listen调用来被动接受连接)成功返回0,一旦成功,sockfd唯一标识这个连接。客户通过读写这个sockfd来通信。失败返回-1并置errno(ECONNREFUSED和ETIMEDOUT)。

参数解释

sockfd:由socket系统调用返回一个socket。

serv_addr:服务器监听的socket地址。

addrlen:指定这个地址的长度。

TCP读写

函数原型

TCP
ssize_t recv(int sockfd, void *buf, size_t len, int flags);
ssize_t send(int sockfd, const void *buf, size_t len, int flags);
UDP
ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr,socklen_t addrlen);
ssize_t sendto(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen);


函数功能

socket数据读写

UDP与TCP不同在于每次发送都要通过最后两个参数获取发送端的socket地址,因为UDP没有连接的概念。recvfrom和sendto也可用于面向连接,只需将后两个参数置NULL。

函数参数

buf:指定缓冲区位置

len:指定缓冲区大小

flags :MSG_OOB:发送或接受紧急数据(带外数据)。

socket选项

函数原型

int getsockopt(int sockfd, int level, int option_name, void *option_value, socklen_t * restrict option_len);
int setsockopt(int sockfd, int level, int option_name, const void* option_value, socklen_t option_len);


函数功能

用来读取和设置socket文件描述符属性的方法。

option_name参数说明

SO_REUSEADDR 强制使用被处于TIME_WAIT状态的连接占用的socket地址。

SO_RCVBUF和SO_SNDBUF:TCP接收缓冲区和发送缓冲区的大小。

获取IP地址函数

函数原型

int getaddrinfo(const char *hostname, const char *service, const struct addrinfo *hints, struct addrinfo **result);

int getnameinfo(const struct sockaddr *sockaddr, socklen_t addrlen, char *host, socklen_t hostlen, char *serv, socklen_t servlen, int flags);


函数功能

通过主机名获得IP地址,通过服务名获得端口号

通过socket地址获取以字符串表示的主机名和服务名

参数解释

hostname:可以接受主机名或字符串表示的IP地址

service:接受服务名或者字符串表示的十进制端口号

hints:设置NULL,表示允许函数反馈任何有用的结果

result:指向一个存储函数反馈结果的链表

host:存放返回的主机名

serv:存放返回的服务名
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  socket