Tag: 套接字

如何更改linux套接字文件的权限?

我有一个程序,它创建一个套接字,然后我想更改套接字文件的权限: ret_val = chmod(filename, 0777); ,但它不会改变,即使ret_val为0.如果我在常规文件上尝试相同的操作,它也可以。 有任何想法吗? PS:我以root身份运行程序,因此它拥有所需的所有权限。

使用recvfrom()和sendto()发送结构

我使用的是C语言 ,它是服务器和客户端的通用平台 。 我有一个特定类型的结构,我想从服务器发送到客户端。 例如 服务器代码 //necessary declarations struct hostent *hp; hp=gethostbyname(“www.google.com”); sendto(sockDes,&hp,sizeof(hp),0,(struct sockaddr *)&cli_addr,sizeof(cli_addr)); 客户代码 struct hostent *hp; msg=recvfrom(mysock,&hp,sizeof(hp),0,(struct sockaddr)&serv_addr,&size_len); 所以,基本上我想从服务器向客户端发送一个结构。 但是从上面的代码中我得到了分段错误,我不确定这种结构转移是否可行。 有什么出路吗?

(How)我可以从套接字文件描述符中确定套接字系列

我正在编写一个包含IPC函数的API,这些函数将数据发送到另一个可能是本地或另一个主机的进程。 我真的很喜欢发送function如下: int mySendFunc(myDataThing_t* thing, int sd); 没有调用者必须知道 – 在mySendFunc()调用的直接上下文中 – sd是否导致本地或远程进程。 在我看来,如果我能这样: switch (socketFamily(sd)) { case AF_UNIX: case AF_LOCAL: // Send without byteswapping break; default: // Use htons() and htonl() on multi-byte values break; } 有人建议我可以实现socketFamily(): unsigned short socketFamily(int sd) { struct sockaddr sa; size_t len; getsockname(sd, &sa, &len); return sa.sa_family; } 但是我有点担心getsockname()的效率,并且想知道我每次发送都能负担得起。

分别通过TCP套接字发送和接收字符串

我有一个TCP服务器和客户端,具有已建立的套接字。 假设我有以下情况: 服务器: char *fn = “John”; char *ln = “Doe”; char buffer[512]; strcpy(buffer, fn); send(*socket, buffer, strlen(buffer), 0); strcpy(buffer, ln); send(*socket, buffer, strlen(buffer), 0); 客户: char *fn; char *ln; char buffer[512]; bytes = recv(*socket, buffer, sizeof(buffer), 0); buffer[bytes] = ‘\0’; strcpy(fn, buffer); bytes = recv(*socket, buffer, sizeof(buffer), 0); buffer[bytes] = ‘\0’; strcpy(ln, buffer); printf(“%s”, […]

将套接字绑定到IPv6地址

我正在尝试编写一个侦听IPv4和IPv6地址的Web服务器。 但是,我最初写的代码不起作用。 然后我发现IPv6结构适用于IPv4和IPv6。 所以现在我使用IPv6结构,但只有IPv4地址才有效。 这篇post, 为什么我不能将ipv6 socket绑定到linklocal地址 ,后面说要添加server.sin6_scope_id = 5; 所以我这样做但它仍然不接受IPv6 telnet连接。 任何帮助将不胜感激,因为我彻底难过。 谢谢! 我的代码如下: void initialize_server(int port, int connections, char* address) { struct sockaddr_in6 socket_struct; /*Creates the socket*/ if ((sock_fd = socket(AF_INET, SOCK_STREAM, 0)) < 0) { syslog(LOG_ERR, "%s\n", strerror(errno)); exit(EXIT_FAILURE); }/*Ends the socket creation*/ /*Populates the socket address structure*/ socket_struct.sin6_family = AF_INET6; if(address […]

寻找提供类似于Google Go频道的function的C或C ++库

…用于multithreading网络服务器。 我想在多个线程之间传递数据。 目前我正在使用套接字,select()上的主线程阻塞和recv()上的worker阻塞,尽管我觉得在C ++中可能有更高级或预先打包的方法来处理这个任务。

适用于C的HTTP POST / GET的轻量级库?

我打算为Windows中的音乐播放器创建一个Last.FM scrobbler插件。 Last.FM提交API在HTTP / 1.1 GET和POST上进行中继。 我从来没有完成面向Internet的编程,我仍然知道HTTP协议,但我想开始玩它发送和获取一些数据。 我看过Winsock界面,但我不知道使用任何更简单的东西是否更好。 你们中的任何人都知道我该怎么办? 我能用什么? 如果是这样,你能指点我一个教程吗? 如果它是一个库,我可以静态链接它,我想只提供插件的DLL。

以编程方式在C中设置MTU

客户要求MTU限制应为1492。 有没有办法在源代码中执行此操作(C中的程序)? 有没有其他方法可以做到这一点? (ifconfig的?) 为什么有人需要将MTU修改到一定限度? 有什么好处? 而最重要的是:通过改变MTU是否存在破坏代码的风险?

知道C中的任何跨平台套接字库(windows和Linux)吗?

我期待在linux和windows中进行套接字通信(监听,接受,连接,接收,发送,断开)。 我的项目是在C中,所以除非有人能想到让我将C ++库集成到C项目中的方法,否则库也必须在C中。 最终,我希望该库具有ipv6支持和非阻塞模式,但是,这些东西并不是必需的。 有谁知道任何库/跨平台示例代码? 即使只是大型代码片段也会有所帮助。 到目前为止,我发现的少数套接字库都是用C ++编写的。

检查sockets是否已连接

我有一个应用程序需要在某个时间将一些数据发送到服务器。 简单的方法是关闭连接,然后在我想要发送内容时再次打开它。 但我想保持连接打开,所以当我想发送数据时,我首先使用此函数检查连接: bool is_connected(int sock) { unsigned char buf; int err = recv(sock,&buf,1,MSG_PEEK); return err == -1 ? false : true; } 不好的是,这不起作用。 当没有数据要接收时它会挂起。 我能做什么? 如何检查连接是否仍然打开?