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: 指定被监听的socketbacklog:提示内核监听队列的最大长度,典型值为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:存放返回的服务名
相关文章推荐
- java-模拟tomcat服务器
- Linux socket 初步
- java socket 注意的地方
- java socket 注意的地方
- C#基于socket模拟http请求的方法
- 简单的Ruby中的Socket编程教程
- Socket不能选择本地IP连接问题如何解决
- C#之Socket操作类实例解析
- 使用C#来编写一个异步的Socket服务器
- C#使用Socket快速判断数据库连接是否正常的方法
- 科学知识:理解socket
- websocket++简单使用及实例分析
- Android聊天工具基于socket实现
- php与flash as3 socket通信传送文件实现代码
- 解决time_wait强制关闭socket
- asp.net使用Socket.Send发送信息及Socket.SendFile传输文件的方法
- C#使用Socket上传并保存图片的方法
- 深入php socket的讲解与实例分析
- Linux网络编程之UDP Socket程序示例
- Linux网络编程之socket文件传输示例