相关疑难解决方法(0)

使用AF_UNSPEC会有哪些缺点/风险?

Beej的网络编程指南

您可以强制它在ai_family字段中使用IPv4或IPv6,或将其保留为AF_UNSPEC以使用任何内容.这很酷,因为您的代码可以与IP版本无关.

正如标题所说 - 总是使用的缺点(或风险,如果有的话)AF_UNSPEC,而不是指定IPv4或IPv6?

或者只是出于一个原因 - 如果指定了版本,这将保证只支持此版本吗?


一点背景 - 我考虑在客户端 - 服务器(C++)应用程序中添加对IPv6的支持,并且应该支持这两个版本.所以我想知道它是否可以使用,AF_UNSPEC或者最好"识别"字符串中的地址并使用AF_INET6AF_INET取决于地址.

c c++ unix sockets network-programming

8
推荐指数
1
解决办法
8962
查看次数

C++套接字recv()系统调用返回-1

我目前在服务器和客户端之间传递消息时遇到问题.据我所知,我正在遵循Beej的套接字编程教程概述的套接字编程的最佳实践.

当我运行这两个进程时,recv()系统调用返回-1(错误),而不是接收的字节数.此外,当尝试输出buf时,有一堆gobbledygook字符.这是有道理的,因为错误.

我想知道是否有人可以引导我朝着正确的方向指导我为什么遇到recv()的问题?以下是相关的代码片段.

服务器:

struct sockaddr_storage their_addr;
socklen_t addr_size;
int sockfd, newfd, byte_count, status;
char buf[512];
struct addrinfo hints,  *res;

//  first,  load  up  address  structs  with  getaddrinfo():
memset(&hints,  0,  sizeof  hints);
hints.ai_family  =  PF_INET;
hints.ai_socktype  =  SOCK_STREAM;
hints.ai_protocol = IPPROTO_TCP;

// get address info, print stuff if error
if((status = getaddrinfo("nunki.usc.edu",  "21957",  &hints,  &res)) !=0){
    fprintf(stderr, "getaddrinfo error: %s\n", gai_strerror(status));
    exit(1);
}

//  make  a  socket:
if((sockfd  =  socket(res->ai_family,  res->ai_socktype,  res->ai_protocol)) == -1){
    cout << …
Run Code Online (Sandbox Code Playgroud)

c++ sockets linux

0
推荐指数
1
解决办法
1749
查看次数

标签 统计

c++ ×2

sockets ×2

c ×1

linux ×1

network-programming ×1

unix ×1