WSARecv不会停止阅读

时间:2016-01-15 01:44:58

标签: windows sockets go

基本上,我在客户端使用WSARecv这个函数:

type Conn struct {
    sd s.Handle
    sa s.SockaddrInet4
}

func (c *Conn) Read(b []byte) (int, error) {
    dataBuf := s.WSABuf{Len: uint32(len(b)), Buf: &b[0]}
    flags := uint32(0)
    qty := uint32(0)
    err := s.WSARecv(c.sd, &dataBuf, 1, &qty, &flags, nil, nil)
    return int(qty), err
}

同时服务器正在发送多个数据包(第一个是8个字节,然后它们都在1000个字节以下)。

当缓冲区b已满时,WSARecv不会停止读取。当它占用太多记忆时,我得到了一个难以回答的答案:

  

异常0xc0000005 0x8 0xc08203195f 0xc08203195f   PC = 0xc08203195f   syscall.Syscall9(0x7ff86cafe230,0x7,0x1f8,0xc08200b5d0,0x1,0xc08200b5f0,0xc08200b5e0,0x0,0x0,0x0,...)   (这样的十几行)

当然我的程序崩溃了。

我想知道我的问题是关于我使用WSARecv的方式,还是我每次收到数据包时都会发回一个知识。

注意:我的服务器在Linux下(和windows ofc下的客户端)。

0 个答案:

没有答案