简体   繁体   English

recvfrom 意外错误:参数无效

[英]recvfrom unexpected error: Invalid argument

I'm writing a server-client application using UDP protocol.我正在使用 UDP 协议编写服务器-客户端应用程序。 When I run the recvfrom I get the following error and I really can't understand why:当我运行recvfrom时出现以下错误,我真的不明白为什么:

recvfrom: Invalid argument recvfrom:无效参数

Here's what I assumed is the code relative to this error:这是我假设的与此错误相关的代码:

#define CLIE_PORT 5499
#define MAXMSGSIZE (1024 * 1024) // Max message size is 1MB
#define CLIE_PORT 5499
#define PACKETSZ 7

I'm running rcv_string in this way:我以这种方式运行rcv_string

char *result = malloc(MAXMSGSIZE);
struct sockaddr_in sndaddr;
rcv_string((uint16_t) CLIE_PORT, &result, &sndaddr);

Here's the implementation of rcv_string (inside there's the call to recvfrom ).这是rcv_string的实现(里面有对recvfrom的调用)。

int rcv_string(uint16_t port, char **return_string, struct sockaddr_in *sndaddr) {
    // [...]
    memset((char *) sndaddr, 0, sizeof(*sndaddr));
    (*sndaddr).sin_family = AF_INET;
    (*sndaddr).sin_port = htons(port);
    int reuse = 1;
    if (setsockopt(sockfd_in, SOL_SOCKET, SO_REUSEADDR, (const char *) &reuse, sizeof(reuse)) < 0) {
        perror("setsockopt");
        return -1;
    }
    if (bind(sockfd_in, (struct sockaddr *) sndaddr, sizeof(*sndaddr)) < 0) {
        perror("bind");
        return -1;
    }
    socklen_t len;
    if ((recvfrom(sockfd_in, buff, PACKETSZ + 1, 0, (struct sockaddr *) sndaddr, &len)) < 0) {
            perror("recvfrom");
            return -1;
        }
    // [...]
}

What could be the problem?可能是什么问题呢? (If you think I should upload more code, tell me!) (如果您认为我应该上传更多代码,请告诉我!)

I think it should be socklen_t len=sizeof(*sndaddr);我觉得应该是socklen_t len=sizeof(*sndaddr); . .

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM