Heim  >  Fragen und Antworten  >  Hauptteil

c++ - Socket (TCP) verwendet RECV zum Empfangen von Datenblockierungsproblemen?

Allgemein gesagt: Socket (TCP) verwendet Recv, um Daten zu empfangen. Wenn im Kernel-Cache keine Daten vorhanden sind, wird er blockiert.

Wenn dann die TCP-Verbindung nicht getrennt wird, die andere Partei jedoch niemals Daten sendet, blockiert der Funktionsaufruf recv dann das Programm für immer?

扔个三星炸死你扔个三星炸死你2659 Tage vor1222

Antworte allen(2)Ich werde antworten

  • PHP中文网

    PHP中文网2017-06-10 09:50:28

    socket分为阻塞和非阻塞两种,默认阻塞模式,可以通过参数设置修改为非阻塞;
    阻塞的含义:其实是TCP/IP协议栈中的缓冲区,
    (1)阻塞模式下:当buffer内没有数据了,那么就一直等待到有数据返回;
    (2)非阻塞模式下:没有数据,会立即返回一个参数(例如python下是抛出一个异常)

    Antwort
    0
  • 大家讲道理

    大家讲道理2017-06-10 09:50:28

    可以用setsockopt()函数设置超时时间

    Antwort
    0
  • StornierenAntwort