У меня есть сокуминяция между клиентом Perl и сервером C ++.
Код Perl:
if (!socket(SERVER, AF_INET, SOCK_STREAM, getprotobyname('tcp'))) {
die "Can't allocate socket\n";
} elsif (!connect(SERVER,sockaddr_in($PORT, $tcp_addr))) {
die "Can't connect to server at $tcp_addr port $PORT...\n";
}
SERVER -> autoflush(1);
print SERVER "$line";
Если $line
был слишком длинным, он фрагментирован, и на стороне сервера C ++ мне приходится вызывать recv
несколько раз (даже не зная фактической ожидаемой длины!).
Как лучше всего с этим бороться?
Я подумал о некоторых способах:
- Может быть, есть какой-нибудь модуль Perl, который занимается этим?
- Может быть, я могу просто отключить фрагментацию, но не приведет ли это к дальнейшему сбою передачи?
- Я могу просто добавить длину сообщения к отправленному сообщению и буду звонить
recv
, пока не получу сообщение целиком, но разве это не уродливо?
- Что-нибудь еще?
Каким будет лучшее решение?