int create_server_socket(...) {
  int ret, fd;

  fd = socket(...);
  if (fd < 0) {
    ret = -ERROR_SOCKET;
    goto FAIL_RETURN;
  }

  ret = bind(...);
  if (ret < 0) {
    ret = -ERROR_BIND;
    goto FAIL_CLOSE_AND_RETURN;
  }
  
  ret = listen(...);
  if (ret < 0) {
    ret = -ERROR_LISTEN;
    goto FAIL_CLOSE_AND_RETURN;
  }
  
  ret = accept(...);
  if (ret < 0) {
    ret = -ERROR_ACCEPT;
    goto FAILE_CLOSE_AND_RETURN;
  }

FAIL_CLOSE_AND_RETURN:
  close(fd);
FAIL_RETURN:
  return ret;
}