シグナルスロットに libsigc++ を使用するのは初めてです。正常に動作している 2 つの関数があります。私のシナリオ: ソケットに recv のデータがある場合に true を返すブール関数として関数を作成しました。
bool Socket::isDataReady()
{
void *buffer = malloc (FRAMEBUFFER + 6);
sockaddr_in from;
socklen_t fromLength = sizeof( from );
if (::recvfrom(this->socketFD,buffer,FRAMEBUFFER + 6, 0, (sockaddr *)&this->getSocketAddressStructureOfServer(), &fromLength ) == -1)
{
if (errno == EAGAIN || errno == EWOULDBLOCK)
return false;
}
return true;
}
だから、ネットからデータを取得する関数を書きました:
int Socket::readDatagrams(unsigned char *buffer, string &srcAddress, unsigned short int & srcPort)
{
unsigned int maximumPacketSize = FRAMEBUFFER + 6;
int returnValue ;
sockaddr_in from;
socklen_t fromLength = sizeof( from );
int receivedBytes;
fromLength = sizeof(this->getSocketAddressStructureOfServer());
receivedBytes = recvfrom( this->socketFD, buffer, maximumPacketSize, 0, (sockaddr *)&this->getSocketAddressStructureOfServer(), &fromLength );
returnValue = receivedBytes;
if ( receivedBytes <= 0 )
returnValue = -1;
/// exporting data
//
srcAddress = inet_ntoa(this->getSocketAddressStructureOfServer().sin_addr);
srcPort = ntohs( ( unsigned short int)this->getSocketAddressStructureOfServer().sin_port );
return returnValue;
}
私は UDP サーバーを持っていて、コンストラクターですべてを初期化します。したがって、isDataReady() が true になるたびに、readDatagram 自体が実行されることを通知する必要があります。libsigc++ でどのようにコードを記述しますか? 私は彼らのチュートリアルを読みましたが、そのチュートリアルは func as sig について述べていませんでした。