Как сделать сокет неблокирующим

Я работаю над написанием простого клиентского приложения Redis в Objective-C. Чтобы общаться с Redis на моем сервере, мне нужно подключиться к серверу по SSH, а затем открыть сокет TCP для отправки данных туда и обратно. Я пытаюсь следовать примеру с libssh2.org, direct_tcpip.c, и у меня получилось работать хорошо. Я могу запустить код, и он скажет:

Waiting for TCP connection on... 0.0.0.0:6379

Затем я пытаюсь связаться с ним с помощью telnet:

telnet 0.0.0.0 6379

Я могу успешно подключаться и взаимодействовать с Redis таким образом, ДА!

Теперь следующим шагом для меня является возможность программно общаться с сервером и отправлять ему команды из пользовательского интерфейса моего приложения, но программа блокируется, когда я вызываю accept(), и застревает в ожидании подключения. Это проблема. потому что мне нужно программно подключиться к нему, и я не могу понять, как это сделать.

Я пытался позвонить libssh2_session_set_blocking(session, 0); перед accept(), но это ничего не изменило.

Моя цель — настроить переадресацию, чтобы мое приложение могло как можно проще взаимодействовать с удаленным сервером Redis, и я совершенно новичок в программировании сокетов. Мне нужен туннель SSH, потому что Redis не имеет встроенной системы безопасности, и рекомендуется использовать его для внутренней связи.

Спасибо всем, кто может указать мне в правильном направлении!


person ozz    schedule 15.03.2013    source источник
comment
Вам нужно использовать многопоточность, а затем заставить сокет прослушивать только один из потоков. google.com.au/search?q=osx+socket+ многопоточный   -  person Danack    schedule 15.03.2013


Ответы (1)


Комментарий, опубликованный @Danack, решил проблему для меня. Я использую фоновый поток для прослушивания, и теперь я больше не заблокирован и подключаюсь просто отлично.

person ozz    schedule 15.03.2013