美文网首页
Socket连接被重置

Socket连接被重置

作者: zzkdev | 来源:发表于2018-05-27 11:18 被阅读0次

一个神奇的bug

用c语言搭建了一个类似http服务器的东西,在返回response后,游览器连接被重置。

原因分析

第一次尝试

试了一下不关闭socket连接,果然连接没有被重置,但是页面一直在加载中。。。。

百度之后

查询到原因可能是服务器关闭连接时不太优雅,导致数据包没发完就关闭连接了。。

解决方法

使用int shutdown(int sockfd,int how)函数确保输出缓冲区的数据全部发出。下面是函数使用方法:
int shutdown(SOCKET s, int howto);
sock 为需要断开的套接字,howto 为断开方式。
howto有以下取值:

  • SD_RECEIVE:关闭接收操作,也就是断开输入流。
  • SD_SEND:关闭发送操作,也就是断开输出流。
  • SD_BOTH:同时关闭接收和发送操作。

shutdown在操作成功时返回0,在出现错误时返回-1(并置相应errno)
如果关闭读,则接受缓冲区的未读出的所有数据都将丢失,以后不会再接受任何数据
如果关闭写,如果输出缓冲区内有数据,则所有的数据将发送出去后将发送一个FIN信号
而closesocket则是关闭该socket,马上发送FIN信号,所有的未完成发送或者接受的数据都将被丢失.

# 示例
# 先关闭写,再关闭套接字
shutdown(socket, SD_SEND);
closesocket(socket);

这里是我的博客


相关文章

  • Socket连接被重置

    一个神奇的bug 用c语言搭建了一个类似http服务器的东西,在返回response后,游览器连接被重置。 原因分...

  • socket

    Socket连接与HTTP连接的不同 通常情况下Socket连接就是TCP连接,因此Socket连接一旦建立,通信...

  • 第二篇:socket编程

    目录一、socket是什么?二、socket连接与HTTP连接的区别三、如何建立一个socket连接?四、使用OC...

  • 传输层-Socket

    Socket TCP Socket UDP Socket 连接处理方式 一连接一进程 一连接一线程 多连接一线程 ...

  • iOS - HTTP、Socket、TCP的区别

    目录 TCP连接与HTTP连接的区别TCP连接与Socket连接的区别HTTP连接与Socket连接的区别什么时候...

  • mysql 两种连接方式和SSL连接、x509认证

    mysql连接可分为socket连接和TCP|IP连接两种。 1、本地socket连接 [root@localho...

  • TCP HTTP Soket

    1、TCP连接 2、HTTP连接 3、SOCKET原理 3.1套接字(socket)概念 3.2 建立socket...

  • 2018-04-23

    LVS+Keepalived 实现socket连接,socket client无法连接lvs? VIP:10.5....

  • (二)即时通讯系列之TCP Socket

    即时通讯系列之Socket简介 一、Socket连接 1.连接过程 建立Socket连接至少需要一对套接字,其中一...

  • iOS socket套接字

    socket包含的API 创建及调用 创建socket 绑定 ip port 连接socket 关闭socket ...

网友评论

      本文标题:Socket连接被重置

      本文链接:https://www.haomeiwen.com/subject/hslbjftx.html