// Copyright 2015 The Cobalt Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#include "starboard/socket.h"

#include <errno.h>
#include <sys/socket.h>

#include "starboard/log.h"
#include "starboard/shared/posix/socket_internal.h"

namespace sbposix = starboard::shared::posix;

SbSocketError SbSocketListen(SbSocket socket) {
  if (!SbSocketIsValid(socket)) {
    errno = EBADF;
    return kSbSocketErrorFailed;
  }

  SB_DCHECK(socket->socket_fd >= 0);
  // TODO: Determine if we need to specify a > 0 backlog. It can go up to
  // SOMAXCONN according to the documentation. Several places in chromium
  // specify the literal "10" with the comment "maybe dont allow any backlog?"
  int result = listen(socket->socket_fd, 0);
  if (result != 0) {
    return (socket->error = sbposix::TranslateSocketErrno(result));
  }

  return (socket->error = kSbSocketOk);
}
