diff -r e8e63152f320 -r 2a9601315dfc javacommons/comms/ipclib/socket/src/serversocket.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/javacommons/comms/ipclib/socket/src/serversocket.cpp Mon May 03 12:27:20 2010 +0300 @@ -0,0 +1,110 @@ +/* +* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: ?Description +* +*/ + +#include +#include +#include +#include +#include + +#include "logger.h" + +#include "serversocket.h" + +const int INVALID_SOCKET = 0; + +namespace java +{ +namespace comms +{ + + +ServerSocket::ServerSocket() : mSocket(INVALID_SOCKET) +{ +// JELOG2(EJavaComms); +} + +ServerSocket::~ServerSocket() +{ + close(); +} + +int ServerSocket::open(int aPort) +{ +// JELOG2(EJavaComms); + + mSocket = socket(AF_INET, SOCK_STREAM, 0); + if (mSocket == -1) + { + return -1; + } + + int flag = 1; + setsockopt(mSocket, SOL_SOCKET, SO_REUSEADDR, (char*)&flag, sizeof(int)); + + sockaddr_in addr; + addr.sin_family = AF_INET; + addr.sin_port = htons(aPort); + addr.sin_addr.s_addr = htonl(INADDR_ANY); + + int rc = bind(mSocket, (sockaddr*)&addr, sizeof(addr)); + if (rc != -1) + { + rc = listen(mSocket, 3); + if (rc != -1) + { + return 0; + } + } + + ELOG2(EJavaComms, "listen failed %d - %s", errno, strerror(errno)); + close(); + return -1; +} + +int ServerSocket::accept() +{ + sockaddr_in sa; + socklen_t saLen = sizeof(sa); + + int socket = ::accept(mSocket, (sockaddr*)&sa, &saLen); + if (socket<0) ELOG2(EJavaComms, "accept failed %d - %s", errno, strerror(errno)); + + return socket; +} + +int ServerSocket::close() +{ + int rc = 0; + if (mSocket !=INVALID_SOCKET) + { + rc = ::close(mSocket); + if (rc<0) ELOG2(EJavaComms, "close failed %d - %s", errno, strerror(errno)); + + mSocket = INVALID_SOCKET; + } + return rc; +} + +int ServerSocket::getSocket() const +{ + return mSocket; +} + +} // namespace comms +} // namespace java +