首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

一切皆Socket

如果函数调用成功,会返回一个标识这个套接的文件描述符,失败的时候返回-1。...类型为SOCK_STREAM的套接字表示一个双向的字节流,与管道类似。流式的套接进行数据收发之前必须已经连接,连接使用connect()函数进行。...errno 函数socket()并不总是执行成功,有可能会出现错误错误的产生有多种原因,可以通过errno获得: 表3 errno的值及含义 值 含义 EACCES 没有权限建立制定的domain的type...失败时返回-1,并设置errno变量。 在网络程序中,当我们向套接文件描述符写时有俩种可能。1)write的返回值大于0,表示写了部分或者是全部的数据。2)返回的值小于0,此时出现错误。...我们要根据错误类型来处理。如果错误为EINTR表示写的时候出现了中断错误。如果为EPIPE表示网络连接出现了问题(对方已经关闭了连接)。

59410
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    领航Linux UDP:构建高效网络新纪元

    常见的错误码包括EACCES权限不足)、EADDRINUSE(地址已经被占用)、EAFNOSUPPORT(地址族不支持)、EINVAL(参数无效)、EMFILE(达到进程允许打开的最大文件数目)、ENFILE...常见的错误包括EACCES权限不足)、EADDRINUSE(地址已经被使用)、EADDRNOTAVAIL(地址不可用)、EAFNOSUPPORT(地址族不支持该套接类型)、EINVAL(套接未打开...如果出现错误,返回-1,并设置errno错误号。此时可以通过perror()函数来打印出错误信息。 注意事项 调用recvfrom函数之前,需要先使用bind函数将socket绑定到一个地址。...这可能是因为buf指向的空间长度为0,或者使用UDP协议时,sendto函数成功地发送了0节的数据。 如果返回值等于-1,表示发送过程中出现错误。...此外,使用sendto函数之前,需要确保已经通过socket函数创建了一个套接,并且(对于面向连接的套接类型)已经通过connect函数与目标地址建立了连接(尽管对于UDP,连接通常不是必需的,但也可以通过

    14110

    网络中进程之间如何通信?

    返回新套接的文件描述符,或者返回-1表示错误。)...recvmsg()/sendmsg()函数,这两个函数是最通用的I/O函数,实际可以把上面的其它函数都替换成这两个函数。...失败时返回-1,并设置errno变量。 在网络程序中,当我们向套接文件描述符写时有俩种可能。 1)write的返回值大于0,表示写了部分或者是全部的数据。 2)返回的值小于0,此时出现错误。...我们要根据错误类型来处理。如果错误为EINTR表示写的时候出现了中断错误。...每一个除send外的Socket函数执行的最开始总要先等待套接的发送缓冲中的数据被协议传送完毕才能继续,如果在等待时出现网络错误,那么该Socket函数就返回 SOCKET_ERROR。

    61220

    Linux的SOCKET编程详解

    TCP/IP协议存在于OS中,网络服务通过OS提供,OS中增加支持TCP/IP的系统调用——Berkeley套接,如Socket,Connect,Send,Recv等 UDP(User Data...而文件描述符是文件描述符表的一个索引,因此从某种意义上说文件指针就是句柄的句柄(Windows系统,文件描述符被称作文件句柄)。...recvmsg()/sendmsg()函数,这两个函数是最通用的I/O函数,实际可以把上面的其它函数都替换成这两个函数。...失败时返回-1,并设置errno变量。在网络程序中,当我们向套接文件描述符写时有俩种可能。1)write的返回值大于0,表示写了部分或者是全部的数据。2)返回的值小于0,此时出现错误。...我们要根据错误类型来处理。如果错误为EINTR表示写的时候出现了中断错误。如果为EPIPE表示网络连接出现了问题(对方已经关闭了连接)。

    2.6K10

    socket的简单使用概念socket通信过程,使用步骤:导入头文件创建socket函数connect连接到服务器发送数据接收服务器返回的数据关闭连接例子:请求百度

    概念 socket又称“套接”,socket应用层和传输层之间,我们的应用层只要将数据传递给socket就可以了,socket会传递给传输层、网络层等。 网络通信其实就是Socket之间的通信。...(套接描述符是一个整数类型的值),如果失败就返回-1 ---- connect连接到服务器 作用:用来将参数sockfd 的socket 连至参数serv_addr 指定的网络地址 int connect...= 0) { NSLog(@"失败"); return; } 参数介绍 套接描述符 指向结构体sockaddr_in的指针,其中包括目的端口和IP地址等 struct sockaddr_in...使用 send 时套接必须已经连接。send 不包含传送失败的提示信息,如果检测到本地错误将返回-1。因此,如果send 成功返回,并不必然表示连接另一端的进程接收数据。...所保证的仅是当send 成功返回时,数据已经无错误地发送到网络

    1.9K70

    socket rst_socket通信编程

    方法处崩溃,是因为TCP套接发送缓冲区的大小为131768节,发送前130000个字节的时候发送缓冲区还未满,因此write方法返回成功,接着继续发送 用抓包工具抓包: 假设server和client...当一个进程向某个已收到RST的套接执行写操作时,(此时写操作返回EPIPE错误)内核向该进程发送一个SIGPIPE信号,该信号的默认行为是终止进程,因此进程必须捕获它以免不情愿地被终止; 继续修改客户端程序如下...错误) 抓包信息如下: 上述情况会引发一个问题:服务器主机进程终止或者崩溃后重启,客户端不write的情况下不会知道,read会返回ECONNRESET错误或者超时; 解决方法用select: 1....如果对端TCP发送一个FIN(对端进程终止),那么该套接变为可读,并且read返回0; 2....如果对端TCP发送一个RST(对端主机崩溃并重新启动),那么该套接变为可读,并且read返回-1,而errno中含有确切的错误码; 这个问题在select详解中讲述 情况三: 修改客户端程序如下,服务端不变

    1.7K30

    Linux内核编程--网络协议与套接编程

    类型描述SOCK_DGRAM数据报套接SOCK_RAW原始套接SOCK_SEQPACKET有序分组套接SOCK_STREAM字节流套接 --protocol参数:选择所给定domain和type...一般只能将一个套接端点绑定到一个给定的地址,尽管有些协议允许多重绑定。 如果调用connect()或listen(),但没有将地址绑定到套接,系统会选一个默认地址去绑定。...套接地址的获得: a.可以调用getsockname()来发现绑定到套接的地址。 b.如果套接已经和对方连接,可以调用getpeername()来找到对方的地址。...建立连接--connect() 如果要处理一个面向连接的网络服务(SOCK_STREAM或SOCK_SEQPACKET),交换数据前,需要在客户端进程的套接和服务端进程的套接之间建立一个连接。...),sendto可以无连接的套接指定一个目标地址。

    2.1K20

    unix网络编程——TCP套接编程

    有序分组套接 SOCK_RAW 原始套接 表2 套接类型 protocol表示某个协议类型常值,或者设置为0,以选择family和type组合的系统默认值,但并不是所有的family和type...指定了协议族(IPv4、Ipv6或Unix)和套接类型(字节流、数据报或原始套接),并没有指定本地协议地址或远程协议地址。...若失败返回-1   sockfd:socket函数返回的套接描述符   servaddr:套接地址结构的指针   addrlen:套接地址结构的大小   套接地址结构必须含有服务器的IP地址和端口号...客户端调用connect函数前不必非要调用bind函数,因为如果需要的话,内核会确认源IP地址,并选择一个临时端口作为源端口。   ...如果是TCP套接,调用connect函数会激发TCP三次握手,而且仅在连接建立成功或失败时才会返回。

    1.1K10

    【网络编程系列】二:socket通信原理及实践

    根据美国计算机历史博物馆的记载,Croker写道:“命名空间的元素都可称为套接接口。一个套接接口构成一个连接的一端,而一个连接可完全由一对套接接口规定。”...这就是为什么通常服务器端listen之前会调用bind(),而客户端就不会调用,而是connect()时由系统随机生成一个。...recvmsg()/sendmsg()函数,这两个函数是最通用的I/O函数,实际可以把上面的其它函数都替换成这两个函数。...失败时返回-1,并设置errno变量。 在网络程序中,当我们向套接文件描述符写时有俩种可能。1)write的返回值大于0,表示写了部分或者是全部的数据。2)返回的值小于0,此时出现错误。...我们要根据错误类型来处理。如果错误为EINTR表示写的时候出现了中断错误。如果为EPIPE表示网络连接出现了问题(对方已经关闭了连接)。

    1.3K60

    深入剖析Linux网络设计中网络IO的重要角色

    成功返回0;失败则返回-1,并设置了全局变量errno,应该处理connect函数返回的错误码。...失败时返回的错误码: 错误码 含义 EACCES,EPERM 用户未启用套接广播标志的情况下尝试连接到广播地址,或者由于本地防火墙规则,连接请求失败。 EADDRINUSE 本地地址已在使用中。...例如,尝试将UNIX域数据报套接连接到流套接时,可能会发生此错误。 ETIMEDOUT 尝试连接时超时。服务器可能太忙,无法接受新连接。...注意,对于IP套接,当服务器启用Syncookie时,超时可能很长。...send错误码: 错误码 含义 EACCES 对目标套接文件的写入权限被拒绝,或者对路径前缀为的目录之一的搜索权限被拒绝。(对于UDP套接)尝试发送到网络/广播地址,好像它是单播地址一样。

    10420

    socket原理讲解_电感器的作用及原理

    TCP/IP协议存在于OS中,网络服务通过OS提供,OS中增加支持TCP/IP的系统调用——Berkeley套接,如Socket,Connect,Send,Recv等 UDP(User Data...recvmsg()/sendmsg()函数,这两个函数是最通用的I/O函数,实际可以把上面的其它函数都替换成这两个函数。...失败时返回-1,并设置errno变量。 在网络程序中,当我们向套接文件描述符写时有俩种可能。1)write的返回值大于0,表示写了部分或者是全部的数据。2)返回的值小于0,此时出现错误。...我们要根据错误类型来处理。如果错误为EINTR表示写的时候出现了中断错误。如果为EPIPE表示网络连接出现了问题(对方已经关闭了连接)。...连接出现连接不的问题,一般是网路出现问题或者网卡超负荷或者是连接数已经满啦。

    33010

    CSAPP 网络编程 笔记

    浏览器可以浏览目录里的文件和下级目录。 如果点击文件,则把文件打开传给浏览器(浏览器能够自动显示图片、PDF,或 HTML、CSS、JavaScript 以及文本文件)。...原始套接口(SOCK_RAW) 这种套接口允许进程直接存取下层的协议。 现在全世界的人都在解决 C10K 问题。...典型:多个描述多路复用,比如交互式输入和网络套接出现粘包如何处理? UDP与原始套接口 UDP协议中发送数据大于缓冲区大小,系统如何处理,说明理由。...利用原始套接口发送 icmp 回射请求,等待对方的应答,应答中包含请求的标识符、序列号、时间戳 简述traceroute程序的功能与实现原理。...int listen(int sockfd, int backlog); // 成功则返回0,失败返回-1,错误原因存于errno accept 当服务请求到达 accept 监视的 socket(

    57330

    socketpair原理_pair of shoes意思

    如果函数成功,则返回0,创建好的套接分别是sv[0]和sv[1];否则返回-1,错误码保存于errno中。 基本用法: 1. 这对套接可以用于全双工通信,每一个套接既可以读也可以写。...如果往一个套接(如sv[0])中写入后,再从该套接读时会阻塞,只能在另一个套接中(sv[1])读成功; 3. 读、写操作可以位于同一个进程,也可以分别位于不同的进程,如父子进程。...返回值:成功则返回接收到的字符数, 失败则返回-1, 错误原因存于errno 中. send函数 定义函数:int send(int s, const void * msg, int len, unsigned...返回值:成功则返回实际传送出去的字符数, 失败返回-1....收到数据为: it is a test 程序分析:由套接sock[1]发数据到本地主机,由套接sock[0]接收发送过来的数据。 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。

    39110

    socketpair函数用法

    Unix套接好像是套接和管道的混合,socketpair()可以创建一对无命名的、相互连接的Unix域套接。 管道历史上,它们是半双工的(数据只能在一个方向上流动),但是现在也有全双工管道。...如果函数成功,则返回0,创建好的套接分别是sv[0]和sv[1];否则返回-1,错误码保存于errno中。 基本用法: 1. 这对套接可以用于全双工通信,每一个套接既可以读也可以写。...如果往一个套接(如sockfd[0])中写入后,再从该套接读时会阻塞,只能在另一个套接中(sockfd[1])读成功; 3....返回值:成功则返回接收到的字符数, 失败则返回-1, 错误原因存于errno 中. send函数 定义函数:int send(int s, const void * msg, int len, unsigned...返回值:成功则返回实际传送出去的字符数, 失败返回-1. 错误原因存于errno.

    2.2K30

    Java NIO之套接通道

    1.简介 前面一篇文章讲了文件通道,本文继续来说说另一种类型的通道 -- 套接通道。展开说明之前,咱们先来聊聊套接的由来。...2 通道类型 Java 套接通道包含三种类型,分别是 类型 说明 DatagramChannel UDP 网络套接通道 SocketChannel TCP 网络套接通道 ServerSocketChannel...TCP 服务端套接通道 Java 套接通道类型对应于两种通信协议 TCP 和 UDP,这个大家应该都知道。...非阻塞模式虽然不会阻塞线程,但是方法返回后,还要进行循环检测,线程实际还是被阻塞。...出现这个问题的原因是和 Java NIO 套接通道的 IO 模型有关,套接通道采用的是“同步非阻塞”式 IO 模型,用户发起一个 IO 操作后,即可去做其他事情,不用等待 IO 完成。

    1.1K60

    原始套接 IP_HDRINCL 转

    @当需要编写自己的IP数据包首部时,可以原始套接设置套接选项IP_HDRINCL.不设置这个选项的情况下,IP协议自动填充IP数据包的首部。   .../n");exit(1);}   原始套接直接使用IP协议的套接,所以是非面向连接的。在这个套接可以调用connect和bind函数,分别执行绑定对方和本地地址。   ...发送数据包   使用原始套接发送数据包必须遵循以下规则:1.如果没有用connect函数绑定对方地址时,则应使用sendto或sendmsg函数发送数据包,函数参数中指定对方地址。如?...将一个IP数据包传送给原始套接之前,内核需要选择匹配的原始套接1.数据包的协议域必须与接收原始套接的协议类型匹配。   ...3.如果原始套接字调用connect函数指定了对方的IP地址,则到达的IP数据包的源IP地址秘须与这它相同

    2.4K10

    C语言实现Socket简单通信

    ) AF_LOCAL(UNIX协议) AF_ROUTE(路由套接) AF_KEY(秘钥套接) type: 指定使用的套接的类型:SOCK_STREAM(字节流套接) SOCK_DGRAM...protocol: 如果套接类型不是原始套接,那么这个参数就为0 2、int bind(int sockfd, struct sockaddr *myaddr, int addrlen)...小于0表示出现错误.如果错误为EINTR说明读是由中断引起的, 如果是ECONNREST表示网络连接出了问题.参数nbyte是请求读取的字节数,读上来的数据保存在缓冲区buf中,同时文件的当前读写位置向后移...在网络程序中,当我们向套接文件描述符写时有俩种可能. 1)write的返回值大于0,表示写了部分或者是全部的数据. 2)返回的值小于0,此时出现错误.我们要根据错误类型来处理....如果错误为EINTR表示写的时候出现了中断错误. 如果为EPIPE表示网络连接出现了问题(对方已经关闭了连接).

    60820

    Linux的SOCKET编程详解

    许多操作系统中,套接描述符和其他I/O描述符是集成在一起的,所以应用程序可以对文件进行套接I/O或I/O读/写操作。...recvmsg()/sendmsg()函数,这两个函数是最通用的I/O函数,实际可以把上面的其它函数都替换成这两个函数。...失败时返回-1,并设置errno变量。 在网络程序中,当我们向套接文件描述符写时有俩种可能。1)write的返回值大于0,表示写了部分或者是全部的数据。2)返回的值小于0,此时出现错误。...我们要根据错误类型来处理。如果错误为EINTR表示写的时候出现了中断错误。如果为EPIPE表示网络连接出现了问题(对方已经关闭了连接)。...连接出现连接不的问题,一般是网路出现问题或者网卡超负荷或者是连接数已经满啦。

    8.3K10
    领券