私はlinux envのソケットプログラミングの初心者です。linuxのソケットプログラミング:send()
void proccess_server(int s)
{
ssize_t size =0 ;
char buffer[1024];
for(;;)
{
printf("proccess:%d proccessing socket :%d\n",getpid(),s);
size = recv(s,buffer,sizeof(buffer),0);
if(0 == size)
return ;
sprintf(buffer,"Response from server:%d,%d bytes altogether\n",getpid(),size);
send(s,buffer,strlen(buffer)+1,0);
}
}
と私は私を助けてくださいsend()
でlen
paramはsend(s,buffer,strlen(buffer)+1,0);
に別のバイト(strlen(buffer)+1)
を追加する理由を理解していない:
コードです!
このコードはすべて間違っていますが、どこに見つかりましたか?エラー状態(サイズ== -1)はチェックされず、 "バッファ"がチェックされずにヌルで終了すると予想されるため、セキュリティ上の欠陥があります。 – BatchyX
...それは簡単なチュートリアルで、ネットワークプログラミングのAPI形式のテキストブックです。もし私がそれを修正したいのであれば、データを受け取る前にバッファを\ 0で埋めるべきでしょうか? –
はい、sizeof(バッファ)を最大で-1バイトrecvする必要があります。 – BatchyX