C 我可以在主应用程序和多个线程中使用相同的套接字吗?

C 我可以在主应用程序和多个线程中使用相同的套接字吗?,c,linux,multithreading,sockets,tcp,C,Linux,Multithreading,Sockets,Tcp,我有一个作为客户端连接到TCP服务器的c应用程序,以及我试图在主应用程序和2个子线程中使用的connect()返回的套接字号 这样可以吗?例如,我的主应用程序可能正在执行套接字写入,而工作线程可能正在尝试同时读取套接字?最近我的应用程序崩溃了,我担心这可能是线程同时工作的原因。当我们试图修改任何全局参数或共享资源时,需要使用信号量或互斥锁将其锁定。在这种情况下,如果某个线程正在使用该端口,则另一个线程将无法使用该端口,并且可能会出现资源繁忙错误,甚至可能导致内存故障。 因此需要锁定资源(本例中为

我有一个作为客户端连接到TCP服务器的c应用程序,以及我试图在主应用程序和2个子线程中使用的connect()返回的套接字号


这样可以吗?例如,我的主应用程序可能正在执行套接字写入,而工作线程可能正在尝试同时读取套接字?最近我的应用程序崩溃了,我担心这可能是线程同时工作的原因。当我们试图修改任何全局参数或共享资源时,需要使用信号量或互斥锁将其锁定。在这种情况下,如果某个线程正在使用该端口,则另一个线程将无法使用该端口,并且可能会出现资源繁忙错误,甚至可能导致内存故障。
因此需要锁定资源(本例中为端口)。

套接字是全双工的。它不会导致“资源繁忙”或内存故障。但是,它可能会在对等端造成无法解决的问题。问题是关于套接字,而不是端口。好的,所以答案似乎是我可以按照我建议的方式使用创建的套接字。也许这不是导致我崩溃的原因。建议您尝试使用互斥锁一次。建议您不要在此处发布猜测,或对不存在的内存故障进行FUD,当问题涉及套接字时,不要发布端口。在系统调用过程中,任何系统资源(如FD或socket)都已作为原子操作受到内核的保护,并且不需要在应用程序空间中进行额外的静音,只需复制内核已经执行的操作即可。定义“崩溃”。这很好。继续发展:)