套接字创建、连接和关闭函数

下图是一对 TCP 客户与服务器进程之间发生的一些典型事件的时间表。
[img]http://dl2.iteye.com/upload/attachment/0126/4398/db4635bf-090d-3dcf-acd5-6d218c467852.png[/img]
为执行网络 I/O,一个进程必须做的第一件事就是调用 socket 函数,指定期望的通信协议类型。

#include <sys/socket.h>
int socket(int family, int type, int protocol);
/* 返回:若成功,则为非负描述符;否则为 -1 */

其中,family 参数指明协议族,type 参数指明套接字类型,protocol 参数为某个协议类型常值,或者设为 0,以选择所给定 family 和 type 组合的系统默认值。
下面各表分别给出了参数 family、type、protocol 及 family 和 type 的组合的值的情况。
[img]http://dl2.iteye.com/upload/attachment/0126/4400/51130f00-c3b1-3f9b-9de8-16092d13b14e.png[/img]
[img]http://dl2.iteye.com/upload/attachment/0126/4402/de8236c6-d455-384b-abef-e0e8f2b54142.png[/img]

TCP 客户用 connect 函数来建立与 TCP 服务器的连接。

#include <sys/socket.h>
int connect(int sockfd, const struct sockaddr *servaddr, socklen_t addrlen);
/* 返回:若成功则为 0;否则为 -1 */

sockfd 是由 socket 函数返回的套接字描述符,第二个、第三个参数分别是一个指向包含有服务器的 IP 地址和端口号的套接字地址结构以及该结构的大小。
客户在调用 connect 前不必非得调用 bind 函数,因为如果需要的话,内核会确定源 IP 地址,并选择一个临时端口作为源端口。如果是 TCP 套接字,调用 connect 函数将触发 TCP 的三路握手过程,而且仅在建立成功或出错时才返回。其中出错返回可能有以下几种情况。
1、若 TCP 客户在一定的时间内没有收到 SYN 分节的响应,则返回 ETIMEDOUT 错误。
2、若对客户的 SYN 的响应是 RST(表示复位),则表明该服务器主机在所指定的端口上没有进程在等待与之连接(例如服务器进程也许没有运行)。这是一种硬错误(hard error),客户一接收到 RST 就马上返回 ECONNREFUSED 错误。一般产生 RST 的三个条件是:目的地为某端口的 SYN 到达,然而该端口上没有正在监听的服务器;TCP 想取消一个已有连接;TCP 接收到一个根本不存在的连接上的分节。
3、若客户发出的
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值