如何让socket成为非阻塞的

时间:2013-03-15 00:47:37

标签: objective-c macos sockets redis libssh2

我正致力于在Objective-C中编写一个简单的Redis客户端应用程序。为了在我的服务器上与Redis通信,我需要SSH进入服务器,然后打开TCP套接字来回发送数据。我试图关注example from libssh2.org, direct_tcpip.c并且我已经让它运作良好。我可以运行代码,它会说:

Waiting for TCP connection on... 0.0.0.0:6379

然后我尝试使用telnet与它通信:

telnet 0.0.0.0 6379

我可以通过这种方式与Redis成功连接和交互,是的!

现在,下一步是让我能够以编程方式与服务器通信并从我的应用程序的UI发送命令,但是当我调用accept()并且等待连接时,程序被阻止进来。这是一个问题,因为我需要以编程方式连接到它,我似乎无法弄清楚如何做到这一点。

我尝试在libssh2_session_set_blocking(session, 0);之前调用accept(),但这似乎没有改变任何内容。

我的目标是设置转发功能,以便我的应用可以尽可能轻松地与远程Redis服务器进行通信,并且我对套接字编程完全陌生。我需要SSH隧道,因为Redis没有内置安全性,建议您在内部与之通信。

感谢所有能指出我正确方向的人!

1 个答案:

答案 0 :(得分:0)

@Danack发布的评论为我解决了这个问题。我正在使用后台线程进行聆听,现在我不再被阻止并且连接正常。