基本的tcp套接口编程
2013-10-27 17:02
357 查看
基本的tcp套接口编程
1.socket函数
为了执行网络I/O,一个进程必须做的第一件事情是调用socket函数,指定期望的通信协议类型。#include <sys/socket.h> int socket(int family, int type, int protocol); //返回:非负描述字代表成功,-1代表出错。
family | 说明 |
AF_INET | IPv4协议 |
AF_INET6 | IPv6协议 |
AF_LOCAL | unix域协议 |
AF_ROUTE | 路由套接口 |
AF_KEY | 密钥套接口 |
type | 说明 |
SOCK_STREAM | 字节流套接口 |
SOCK_DGRAM | 数据流套接口 |
SOCK_SEQPACKET | 有序分组套接口 |
SOCK_RAW | 原始套接口 |
protocol | 说明 |
IPPROTO_TCP | tcp传输协议 |
IPPROTO_UDP | udp传输协议 |
IPPROTO_SCTP | sctp传输协议 |
2.connect函数
tcp客户用connect函数建立与tcp服务器的连接。#include <sys/socket.h> int connect(int sockfd, const struct sockaddr *servaddr, socklen_t addrlen); //返回:0代表成功,-1代表出错
如果是tcp套接口出错返回的情况有3种:
1).若tcp客户没有收到SYN分节的响应,则返回ETIMEOUT错误。
2).若对客户的SYN的响应是RST(表示复位),则表明该服务器主机在我们指定的端口上没有进程在等待与之连接。这是一种硬错(hard error),客户一接受到RST就马上返回ECONNEREFUSED错误。
产生RST的三个条件是:目的地为某端口的SYN到达;在该端口上没有正在监听的服务器;tcp想取消一个已有的连接;tcp接受到一个根本不存在的连接上的分节。
3).若客户发出的SYN在中间的某个路由器上引发了一个"destination unreachable"的ICMP错误,则认为是一种软错(soft error).以下两种也是可能的:一是按照本地系统的转发表,根本没有到达远地系统的路径;二是connect调用根本不等待就返回。
3.bind函数
bind函数把一个本地协议地址赋予一个套接口。
#include <sys/socket.h> int bind(int sockfd, const struct sockaddr *myaddr, socklen_t addr_len); //返回:0代表成功,-1代表出错
对于tcp来说,调用bind函数可以指定一个端口号,指定一个IP地址,可以两者都指定,也可以都不指定。
ip地址 | 端口 | 结果 |
通配地址 | 0 | 内核选择ip地址和端口 |
通配地址 | 非0 | 内核选择ip地址,进程指定端口 |
本地ip地址 | 0 | 进程指定ip地址,内核选择端口 |
本地ip地址 | 非0 | 进程指定ip地址和端口 |
4.listen函数
listen函数仅由tcp服务器调用,它做两件事情:1).listen函数把一个未连接的套接口转换为一个被动套接口,指示内核应接受指向该套接口的连接请求。调用listen导致套接口从CLOSED状态转换为LISTEN状态。
2).第二个参数规定了内核应该为相应套接口排队的最大连接数。
#include <sys/socket.h> int listen(int sockfd, int backlog); //返回:0代表成功,-1代表出错
5.accept函数
accept函数有tcp服务器调用,用于从已完成连接队列队头返回下一个已完成连接。如果已完成连接队列为空,那么进程被投入睡眠#include <sys/socket.h> int accept(int sockfd, struct sockaddr *cliaddr, socklen_t *addrlen); //返回:非负描述字代表成功,-1代表出错。
相关文章推荐
- UNP Chapter 4 - 基本TCP套接口编程
- 第四章:基本TCP套接口编程
- 基本TCP套接口编程一
- 基本TCP套接口编程
- UNPv1第四章:基本TCP套接口编程
- UNIX网络编程读书笔记:基本TCP套接口编程
- 基本TCP套接口编程 (http://www.fanqiang.com)
- 基本TCP套接口编程一
- 基本TCP套接口编程 (http://www.fanqiang.com)
- 基本TCP套接口编程
- Unix网络编程卷1第4章 - 基本TCP套接口编程
- 第4章 基本TCP套接口编程
- 基本TCP套接口编程 socket listen bind conncet accept[转]
- UNIX网络编程第4章基本TCP套接字编程
- 网络编程—套接字基础 & 基本TCP套接字编程-基本套接字函数
- UNIX网络编程读书笔记:基本UDP套接口编程
- 【转】Linux C 网络编程——TCP套接口编程
- HDFS基本编程接口
- UNPv1第八章:基本UDP套接口编程
- LINUX下TCP套接口重复服务器编程范例