10 Aralık 2018 Pazartesi

TCP Socket İçin setsockopt metodu

Giriş
Tüm bayrak isimleri TCP_XXX ile başlar.

setsockopt - cork
Ne olduğunu bilmiyorum. Şöyle yaparız.
// setting socket options
int flag = 1;

if(setsockopt(serverSockFd,IPPROTO_TCP,TCP_CORK  ,(char *)&flag,sizeof(flag)) == -1)
{
  printf("setsockopt failed ...");
}
setsockopt - defer accept
Ne olduğunu bilmiyorum. Şöyle yaparız.
int soValue = 1;
if( 0 == setsockopt(sockfd, IPPROTO_TCP, TCP_DEFER_ACCEPT, &soValue,
  sizeof(soValue)) )  {
  log_message( "TCP_DEFER_ACCEPT set success." );
}
else  {
  warn_message( "TCP_DEFER_ACCEPT set failed." );
} 
setsockopt - fast open
Ne olduğunu bilmiyorum. Şöyle yaparız.
int qlen=5;
if( 0==setsockopt( sp_acceptor->native_handle(), SOL_TCP, TCP_FASTOPEN, &qlen,
  sizeof(qlen)) ) {
  log_message( "TCP_FASTOPEN set success." );
}
else  {
  warn_message( "TCP_FASTOPEN set failed." );
}
setsockopt - keep alive
Şöyle yaparız. Hata varsa -1 döner.
int keepalive = 1;
setsockopt(sockfd, SOL_SOCKET, SO_KEEPALIVE,
                        (char *)&keepalive, sizeof(int)); 
setsockopt - quick ack
Ne olduğunu bilmiyorum. Şöyle yaparız.
// setting socket options
int flag = 1;

if(setsockopt(serverSockFd,IPPROTO_TCP,TCP_QUICKACK  ,(char *)&flag,sizeof(flag)) == -1)
{
  printf("setsockopt failed ...");
}
setsockopt - no delay
Şöyle yaparız.
// setting socket options
int flag = 1;

if(setsockopt(serverSockFd,IPPROTO_TCP,TCP_NODELAY  ,(char *)&flag,sizeof(flag)) == -1)
{
  printf("setsockopt failed ...");
}
setsockopt - reuse
Hata varsa -1 döner. Metoda geçerken (char*) olarak geçilebilir. Şöyle yaparız.
int reuse = 1;
setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR,
                         (char *)&reuse, sizeof(int))) {
Metoda geçerken (void*) olarak geçilebilir. Arada ne fark var bilmiyorum. Şöyle yaparız.
int optVal = 1;
const socklen_t optLen = sizeof(optVal);

int rtn = setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, (void*) &optVal,
                optLen);
if (rtn < 0)
{
  perror("Error");
}

Hiç yorum yok:

Yorum Gönder