12得票5回答
如何忽略自己的广播UDP数据包

以下我假设只有一张网络卡。 我程序的一个组件旨在让子网中的其他人知道它的存在。为此,我实现了一个解决方案,每当程序启动(以及之后定期)时,它都会发送广播到INADDR_BROADCAST - 在所需端口上侦听的任何人都将记住它来自何处以备将来使用。 这样做的问题在于我不想记住自己的广播。我...

12得票2回答
套接字关闭:何时使用SocketShutdown。Both

我认为关机序列如下(如此处所述): MSDN文档(备注部分)的内容如下: 当使用面向连接的Socket时,在关闭Socket之前,一定要调用Shutdown方法。这可以确保在关闭之前所有数据都已经发送和接收完毕。 这似乎意味着如果我使用Shutdown(SocketShutdow...

11得票4回答
解引用指针在使用伯克利套接字时会违反严格的防别名规则

我有一些类似如下的代码,其中addr是sockaddr*类型:struct sockaddr_in *sin = (struct sockaddr_in *) addr; const char *IP=inet_ntoa(sin -> sin_addr); 我相信这是使用伯克利套接字的非...

10得票4回答
关于recv和读取缓冲区-C Berkeley套接字

我正在使用伯克利套接字和TCP(SOCK_STREAM套接字)。过程如下:连接到远程地址。向其发送一条消息。从其收到一条消息。假设我正在使用以下缓冲区:char recv_buffer[3000]; recv(socket, recv_buffer, 3000, 0); 问题如下: 调用r...

9得票2回答
如果不及时调用[POSIX]的`recv`会发生什么?

我希望考虑一种可能的情况,即我的TCP/IP流套接字服务的客户端发送数据比它将数据移动到其缓冲区(我自然是指应用程序缓冲区)更快,使用recv并处理它。 那么,在这种情况下会发生什么呢? 在我看来,我的服务下面的某个设施必须接收传入流的片段并将其存储在某个位置,直到我发出“recv”,对吗...

8得票2回答
将套接字绑定到IPv6地址

我正在尝试编写一个监听IPv4和IPv6地址的Web服务器。然而,我最初编写的代码并没有起作用。后来我发现IPv6结构可用于IPv4和IPv6。因此,我现在使用IPv6结构,但只有IPv4地址有效。这篇文章为什么不能将IPv6套接字绑定到本地链接地址建议添加server.sin6_scope_...

7得票1回答
IPv6范围ID与IPv4的区别

最近我在使用IPv6的伯克利套接字API,并注意到IPv6地址(sockaddr_in6)有一个名为sin6_scope_id的字段,而这个字段不是IPv4地址的一部分。 经过一番搜索,我了解到scope_id旨在标识网络接口,因为多个网络接口可以具有相同的链路本地IPv6地址。这很有道理,...