为什么我得到"无效的论点"从这个sendto()?

时间:2017-03-02 07:12:26

标签: c++ c++11

所以我将一个参数传递给我的main,这是一个IP作为char * name ipStr

然后我在调用sendto()之前初始化变量以保持其长度:

sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
char buffer[8];
socklen_t ipLen = sizeof(ipStr);

            res = sendto(sock, buffer, sizeof(buffer), 0,
                    (struct sockaddr*) &ipStr, ipLen);

然而,我仍然将Invalid argument作为返回错误。

我没有使用g ++编译错误,所以我不确定问题出在哪里。

修改

我注意到在sizeof之前我没有删除ipLen,更改了上述内容并仍然获得Invalid argument

2 个答案:

答案 0 :(得分:3)

您的sockaddr可能不对,它是struct,其中包含地址的二进制表示形式以及其中的一些其他数据。它是sockaddr_in的{​​{1}}投射。

尝试:

sockaddr

答案 1 :(得分:0)

socklen_t ipLen = sizeof(ipStr)返回ipStr数据类型的大小,而不是它指向的字符串的长度。 ipStr的数据类型为char *,因此sizeof(ipStr)会在32位系统上产生8(或4)。因此,您的参数可能无法正确解释。

改为使用socklen_t ipLen = strlen(ipStr)