我正在尝试将 Windows 中的旧版 Delphi 代码移植到 Linux。但是我很难在 Linux 中找到相当于少数 Windows 功能的功能。目前我有一个使用winsock进行套接字操作的代码块,代码大纲如下(由于安全原因,我无法发布实际的整个代码)。因此,任何关于如何在 Linux 中实现相同功能的建议(不一定适用于 Delphi,但可以在 C/C++ 中)都会有很大帮助。
我对以下代码的理解是,线程创建一个窗口并等待消息 WM_USER ,稍后当程序创建套接字时,一旦在 FD_READ 或 FD_WRITE 或 FD_ACCEPT 或 FD_CONNECT 中发生任何事件,程序就会注册套接字以发送 WM_USER 消息或 FD_CLOSE。一旦套接字具有列表中提到的任何事件,它就会发送 WM_USER 消息,并且窗口处理程序会处理此消息。所以我的问题是,当我将程序移植到 Linux 时,如何在 Linux 中实现类似的功能?
int main()
{
...
1. A thread is created and which executes the function thread_Function() shown below
....
....
2. Now the program creates a TCP socket(TheSocket), sets few socket options and does the binding and invokes the WSAAsyncSelect() functionas follows on the socket
if WSAAsyncSelect(TheSocket, WindowHandle, WM_USER,
FD_READ or FD_WRITE or FD_ACCEPT or FD_CONNECT or FD_CLOSE)
}
void thread_Function()
{
WindowHandle := CreateWindow(
name, name, // class name, window name
0, 0, 0, 0, 0, // window style, x, y, width, hight
0, 0, // handle to parent and menu or child-window identifier
HInstance,// handle to application instance
nil); // pointer to window-creation data
if WindowHandle = 0 then
Print('Can''t create window handle: '+SysErrorMessage(GetLastError))
else begin
while GetMessage(Msg, 0, 0, 0) do begin
if Msg.message = WM_USER then begin
HandleSocketMessage()
end
end
end
}