0

我在 C 中遇到套接字编程问题。我有一个使用 C 连接函数打开套接字的应用程序,我不希望对套接字进行任何加密。此应用程序还使用 openssl 库的函数(用于其他目的),因此我必须在编译时与 lssl 链接。由于与 lssl 的这种链接,应用程序失败。我不知道发生了什么,openssl 链接覆盖了 C 的连接还是什么?使用 C 的套接字函数和使用 ssl 库是正确的方法吗?

4

2 回答 2

0
strncpy(serverip,"127.0.0.1",strlen("127.0.0.1"));

那是坏了。最后一个参数strncpy应该是缓冲区的大小,而不是要复制的字符串的长度。如果它不大于字符串的长度(在这种情况下不是),就会发生不好的事情。正如strncpy的文档所说:

警告:如果 src 的前 n 个字节中没有空字节,则放在 dest 中的字符串不会以空值结尾。

于 2012-06-21T18:59:49.403 回答
0

打开套接字直到连接的代码如下。

int memfsnode_init()
{
    int sockfd, portno, n,len,i,x,y;
    long l;
    struct sockaddr_in serv_addr;

    portno = METADATASERVER_PORT; //port = 5000
    char *serverip;
    serverip=(char*)malloc(20*sizeof(char));
    strncpy(serverip,"127.0.0.1",strlen("127.0.0.1"));
    sockfd = socket(AF_INET, SOCK_STREAM, 0);
    if (sockfd < 0)
        error("ERROR opening socket");
    bzero((char *) &serv_addr, sizeof(serv_addr));
    serv_addr.sin_family = AF_INET;
    serv_addr.sin_addr.s_addr = inet_addr(serverip);
    serv_addr.sin_port = htons(portno);
    if (connect(sockfd,(struct sockaddr*)&serv_addr,sizeof(serv_addr)) < 0)
        error("ERROR connecting");
    return(sockfd);
}
于 2012-06-21T05:44:59.793 回答