ライブラリコードは、プロセスのアドレス空間で実行されます。使用するファイル記述子は、getsockopt()
を使用してTCP/IPソケットを検索し、次にgetpeername()
を使用して接続されているものを見つけることができるint
値です。
#include <sys/socket.h>
// probably better to use getrlimit() here...
#define MAX_FD 1024
int tcp_socket_fds[ MAX_FD ];
struct sockaddr_in peers[ MAX_FD ];
for (int fd = 0; fd < MAX_FD; fd++)
{
int type;
int len = sizeof(type);
int rc = getsockopt(fd, SOL_SOCKET, SO_TYPE, &type, &len);
if ((0 == rc) && (SOCK_STREAM == type))
{
tcp_socket_fds[ fd ] = 1;
socklen_t socket_len = sizeof(peers[ fd ]);
rc = getpeername(fd, &(peers[ fd ]), &socket_len);
// zero out the peer if getpeername() failed
if (0 != rc)
{
memset(&(peers[ fd ], 0, sizeof(peers[ fd ]));
}
}
else
{
tcp_socket_fds[ fd ] = 0;
}
}
接続されているすべてのTCPは、あなたのプロセスは、チェックの時に開いている、そしてそれはかなり移植する必要がありますソケット見つける:POSIXのドキュメントfor getsockopt()とgetpeername()
あたり。
Linuxでは、 '/ proc/net/tcp'から読むことができます。 – Sergio
なぜ 'netstat'のソースコードを入手して、それがどうなっているのか見てみませんか? – KevinDTimm
ライブラリ自体ではできない場合は、悪い考えです。私はgstreamerが独自のスレッドを実行していると思いますので、あなたがチェックして応答(0接続)を取得するまでには、実際には新しい接続があるかもしれません。 – viraptor