UNPv13:#第4章#基于TCP套接字编程

概述

socket函数

#inlcude <sys/socket.h>

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

connect函数

#include <sys/socket.h>

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

1.TCP客户端没有收到SYN分节的响应,则返回ETIMEDOUT错误。 2.若对客户端的SYN的响应时RST,则表明服务器在指定端口上没有进程在与等待与之连接。这是硬错误,客户一接收到RST就马上返回ECONNREFUSED错误。 3.若客户发送的SYN在中间的某个路由器上引发了一个“目的地不可达”ICMP错误,则认为是一种软错误。按照一定的规则时间间隔继续发送SYN,之后向进程返回EHOSTUNREACH或ENETUNREACH的ICMP错误。

bind函数

#inclue <sys/socket.h>

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

如果指定端口号为0,那么由内核选择一个临时端口;如果指定的IP地址为通配地址,内核将等到套接字已连接(TCP)或已在套接字上发出数据报(UDP)是才选择一个本地IP地址。

listen函数

#include <sys/socket.h>

int listen(int sockfd, int backlog);

listen函数把一个未连接套接字转换成一个被动套接字,指示内核应接受向该套接字的连接请求。backlog(曾)为未完成队列和已完成队列总和的最大值。

当一个客户SYN到达时,如果队列已满,TCP就忽略分节,不发送RST。这种情况是暂时的,客户TCP将重发SYN。如果服务器TCP响应RST,客户connect调用就返回一个错误。

accept函数

#include <sys/socket.h>

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

accept从已完成队列队头返回下一个已完成连接。如果对返回的客户协议地址不感兴趣,可以把cliaddr和adrlen置为空指针。

close函数

#include <sys/socket.h>

int close(int sockfd);

getsockname和getpeername函数

#include <sys/socket.h>

int getsockname(int sockfd, struct sockaddr* localaddr, socklen_t* addrlen);
int getpeername(int sockfd, struct sockaddr* peeraddr, socklen_t* addrlen);

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏从零开始学自动化测试

python接口自动化4-绕过验证码登录(cookie)

前言 有些登录的接口会有验证码:短信验证码,图形验证码等,这种登录的话验证码参数可以从后台获取的(或者查数据库最直接)。 获取不到也没关系,可以通过添加cook...

3955
来自专栏王磊的博客

WebClient 访问间歇性返回403解决方案

说明:前段时间做的一个项目莫名的返回403的错误,这种情况也多大是程序员最不喜欢的了,没办法先来分析一下错误信息。之前的代码如下: WebClient webc...

41011
来自专栏JetpropelledSnake

HCNP学习笔记之ICMP协议与ping原理以及用Python实现ping

944
来自专栏Web 开发

ST3内网安装插件手札

去ST的官网下载最新版(Sublime Text 3),免费用户会不时有弹窗,不过不影响使用。

800
来自专栏Python中文社区

Python网络编程中的套接字名和DNS解析

这一次要讲的是套接字名和DNS,并且还会涉及到网络数据的发送接受和网络错误的发生和处理。下面说套接字名,在创建和部署每个套接字对象时总共需要做5个主要的决定,主...

3187
来自专栏FreeBuf

一个FreeBSD下的通信协议监控程序

最近想要在一个内核里的小聊天服务器练手用,现在写完的内容,可以作为一个通讯协议的监控程序使用。

612
来自专栏Python小屋

Python获取局域网内所有机器IP地址与网卡MAC地址

已发相关文章请参考Python获取本机所有网卡的MAC地址 本文代码使用ARP协议获取局域网内所有计算机的IP地址与MAC地址,思路是使用系统命令arp获取A...

4059
来自专栏七夜安全博客

Python3实现ICMP远控后门(上)_补充篇

1093
来自专栏自动化测试实战

RF接口测试(3)--http请求之post

3566
来自专栏小狼的世界

利用PHP的Popen实现RRDTOOL作图的动态输出

最近看了一下RRDTOOL如何作图,语法确实比较繁琐,但不是太难。命令行下执行的时候,每次都需要输出成为一个文件。我们希望做一个应用,能够动态生成图表,看了看C...

983

扫描关注云+社区