Tag: 套接字

什么是流行的,多平台,免费和开源的套接字库

是否有任何免费的开源库(在C / C ++中)用于广泛使用的套接字,并支持广泛的操作系统(Windows,Unix / Linux,FreeBSD等)。 就像pthreads一样。 否则,剩下的唯一解决方案是为每个操作系统编写套接字包装器。 或者写一个针对winsock和GNU C sys / socket.h库的包装就足够了? 我是不是可以针对GNU C提供的套接字库实现它.GNU C可用于各种平台,我的代码可以在所有这些平台上运行吗?

在C ++中使用’recg’和’MSG_PEEK’获取套接字中可用的字节数

C ++具有以下函数来从套接字接收字节,它可以检查MSG_PEEK标志可用的字节数。 使用MSG_PEEK ,’recv’的返回值是socket中可用的字节数: #include ssize_t recv(int socket, void *buffer, size_t length, int flags); 我需要在不创建buffer情况下获取套接字中可用的字节数(不为buffer分配内存)。 有可能吗?怎么样?

我为什么要使用或不使用MSG_CONFIRM?

我熟悉BSD套接字,然后翻阅sendto的手册页,我碰到了MSG_CONFIRM标志,这对我来说是非常神秘的。 描述说: 告诉链接层转发进度:您从另一方获得了成功的回复。 如果链路层没有得到它,它将定期重新修复邻居(例如,通过单播ARP)。 仅在SOCK_DGRAM和SOCK_RAW套接字上有效,并且当前仅针对IPv4和IPv6实现。 在快速查看arp的手册页之后,我明白标记某些内容MSG_CONFIRM阻止ARP映射MAC地址↔远程计算机的IP地址被认为是陈旧的。 现在我感到困惑,因为我看不出任何我不应该提出的理由,因此,他们为什么不直接在图书馆强制执行。 为什么应用层应该处理在链路层发生的任何事情。 所以我错过了什么? 我什么时候应该设置它,还是不设置它?

为什么从TCP套接字读取整数数组时会得到奇怪的结果?

正如我在上一个问题( 如何在C中通过TCP发送整数数组? )的回答中所建议的那样,我尝试发送一个long int数组,但是我可能正在做一些事情来破解解决方案…… #define ARRAY_LEN 4 /* I’m using long because the numbers are very large, * but in this example they’re small to save space. */ long originalArray[ARRAY_LEN] = { 1, 2, 3, 4 }; myObject.SetMyArray(originalArray); // NOTE: The following is in a different function. long *myArrayFromFunction = myObject.GetMyArray(); write(clientSocketFD, myArrayFromFunction, sizeof(myArrayFromFunction) * […]

是否可以将结构转换为另一个?

任何人都可以描述(struct sockaddr *)&server如何在这里工作? 是否有可能将更大的结构转换为更小的结构? 看到这些结构: // IPv4 AF_INET sockets: struct sockaddr_in { short sin_family; // eg AF_INET, AF_INET6 unsigned short sin_port; // eg htons(3490) struct in_addr sin_addr; // see struct in_addr, below char sin_zero[8]; // zero this if you want to }; struct in_addr { unsigned long s_addr; // load with inet_pton() }; struct sockaddr […]

c发送和接收文件

这是服务器(sendfile)部分: offset = 0; for (size_to_send = fsize; size_to_send > 0; ){ rc = sendfile(newsockd, fd, &offset, size_to_send); if (rc <= 0){ perror("sendfile"); onexit(newsockd, sockd, fd, 3); } offset += rc; size_to_send -= rc; } close(fd); /* la chiusura del file va qui altrimenti rischio loop infinito e scrittura all'interno del file */ memset(buffer, 0, […]

recv()套接字函数返回长度为0的数据

我有一个应用程序,它在端口号5005上与另一个设备(带有Web服务器的硬件设备)建立了套接字连接。 现在,如果我的硬件设备断开连接,那么我将断开与设备的连接。 这是否意味着我现在使用的套接字变为无效。 当发生此断开连接时,是否会收到任何特殊消息,如空字符或其他内容。 如果我的套接字连接变得无效,那么为什么recv()套接字函数不会抛出和SOCKET_ERROR。 相反,为什么我会收到0长度的数据。 谢谢

使用ssl c / c ++进行客户端和服务器通信 – SSL协议不起作用

我正在尝试使用以下软件中的SSL客户端/服务器示例: http : //simplestcodings.blogspot.com.br/2010/08/secure-server-client-using-openssl-in-c.html以使用以下方法创建安全连接SSLv3的。 我在服务器端请求证书进行了一些更改,通信工作正常并且双方都理解。 因此,我的问题是当客户端连接到服务器时,协议通信SSLv3无法正常工作,我使用wirkeshark进行validation,并且在协议字段中只显示TCP或IPA(RSL格式错误的数据包)有人可以帮助我吗? 谢谢! 我按照教程https://help.ubuntu.com/community/OpenSSL创建了我的证书。 这是我的客户端代码: //SSL-Client.c #include #include #include #include #include #include #include #include #include #include #define FAIL -1 //Added the LoadCertificates how in the server-side makes. void LoadCertificates(SSL_CTX* ctx, char* CertFile, char* KeyFile) { /* set the local certificate from CertFile */ if ( SSL_CTX_use_certificate_file(ctx, CertFile, SSL_FILETYPE_PEM) <= 0 ) […]

sendmsg如何工作?

如您所知sendmsg有此声明: int sendmsg(int s, const struct msghdr *msg, int flags); 和msghdr结构有这种forms: struct msghdr { void * msg_name; /* optional address */ socklen_t msg_namelen; /* size of address */ struct iovec * msg_iov; /* scatter/gather array */ size_t msg_iovlen; /* # elements in msg_iov */ void * msg_control; /* ancillary data, see below */ socklen_t msg_controllen; […]

如何在C ++中创建RAW TCP / IP数据包?

我是C ++程序员/网络管理员的开始,但我想如果有人指出我正确的方向,我可以学习如何做到这一点。 大多数教程都使用旧代码进行演示,这些代码由于某种原因不再有效。 因为我在Linux上,所以我需要的是如何编写原始Berkeley套接字的解释。 有人可以给我一个快速的运行吗?