socket.c 833 B

1234567891011121314151617181920212223242526272829303132333435
  1. // (C) 2013 Cybozu et al.
  2. #include "yrmcds.h"
  3. #include <sys/socket.h>
  4. #include <sys/types.h>
  5. #include <sys/time.h>
  6. yrmcds_error yrmcds_shutdown(yrmcds* c) {
  7. if( c == NULL )
  8. return YRMCDS_BAD_ARGUMENT;
  9. if( shutdown(c->sock, SHUT_RD) == -1 ) {
  10. return YRMCDS_SYSTEM_ERROR;
  11. }
  12. return YRMCDS_OK;
  13. }
  14. int yrmcds_fileno(yrmcds* c) {
  15. return c->sock;
  16. }
  17. yrmcds_error yrmcds_set_timeout(yrmcds* c, int timeout) {
  18. if( c == NULL || timeout < 0 )
  19. return YRMCDS_BAD_ARGUMENT;
  20. struct timeval tv;
  21. tv.tv_sec = timeout;
  22. tv.tv_usec = 0;
  23. if( setsockopt(c->sock, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv)) == -1 )
  24. return YRMCDS_SYSTEM_ERROR;
  25. if( setsockopt(c->sock, SOL_SOCKET, SO_SNDTIMEO, &tv, sizeof(tv)) == -1 )
  26. return YRMCDS_SYSTEM_ERROR;
  27. return YRMCDS_OK;
  28. }