Cでのソケットプログラミングの問題に直面しています。C接続機能を使用してソケットを開くアプリケーションがあります。ソケットを介した暗号化は必要ありません。このアプリケーションはopensslライブラリの関数も(他の目的で)使用するため、コンパイル中にlsslとリンクする必要があります。このlsslへのリンクが原因で、アプリケーションは失敗します。何が起こっているのかわかりません。opensslリンケージがCの接続をオーバーライドしているのでしょうか。そして、SSLライブラリを使用するとともにCのソケット関数を使用することは正しいアプローチですか?
質問する
94 次
2 に答える
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 に答える
0
strncpy(serverip,"127.0.0.1",strlen("127.0.0.1"));
それは壊れています。最後のパラメータstrncpy
は、コピーする文字列の長さではなく、バッファのサイズにする必要があります。文字列の長さよりも大きくない場合(この場合はそうではありません)、悪いことが起こります。strncpy
のドキュメントが言うように:
警告: src の最初の n バイトに null バイトがない場合、dest に配置された文字列は null で終了しません。
于 2012-06-21T18:59:49.403 に答える