5950638350
When using stdout/stderr it is no longer necessary to explicitly close the streams for the program to terminate. The automatic close is handled by always closing the associated receive port for write only streams when not waiting for any events. If a close or error handler is installed for stdout/stderr these will still keep the program alive. For stdin better handling of the difference between sockets and pipes have been immplemented. As a special case for stdin when reading from a terminal the a POLLIN signal with 0 available bytes is treated as end-of-file. This will trigger when pressing ctrl-d in a terminal as POLLHUP is not set in that situation. R=ager@google.com BUG= TEST= Review URL: http://codereview.chromium.org//8533005 git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@1507 260f80e4-7a28-3924-810f-c04153c831b5
56 lines
1.4 KiB
C++
56 lines
1.4 KiB
C++
// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
|
|
// for details. All rights reserved. Use of this source code is governed by a
|
|
// BSD-style license that can be found in the LICENSE file.
|
|
|
|
#ifndef BIN_EVENTHANDLER_H_
|
|
#define BIN_EVENTHANDLER_H_
|
|
|
|
#include "bin/builtin.h"
|
|
|
|
// Flags used to provide information and actions to the eventhandler
|
|
// when sending a message about a file descriptor. These flags should
|
|
// be kept in sync with the constants in socket_impl.dart. For more
|
|
// information see the comments in socket_impl.dart
|
|
enum MessageFlags {
|
|
kInEvent = 0,
|
|
kOutEvent = 1,
|
|
kErrorEvent = 2,
|
|
kCloseEvent = 3,
|
|
kCloseCommand = 8,
|
|
kShutdownReadCommand = 9,
|
|
kShutdownWriteCommand = 10,
|
|
kListeningSocket = 16,
|
|
kPipe = 17,
|
|
};
|
|
|
|
|
|
// The event handler delegation class is OS specific.
|
|
#if defined(TARGET_OS_LINUX)
|
|
#include "bin/eventhandler_linux.h"
|
|
#elif defined(TARGET_OS_MACOS)
|
|
#include "bin/eventhandler_macos.h"
|
|
#elif defined(TARGET_OS_WINDOWS)
|
|
#include "bin/eventhandler_win.h"
|
|
#else
|
|
#error Unknown target os.
|
|
#endif
|
|
|
|
class EventHandler {
|
|
public:
|
|
void SendData(intptr_t id, Dart_Port dart_port, intptr_t data) {
|
|
delegate_.SendData(id, dart_port, data);
|
|
}
|
|
|
|
static EventHandler* StartEventHandler() {
|
|
EventHandler* handler = new EventHandler();
|
|
handler->delegate_.StartEventHandler();
|
|
return handler;
|
|
}
|
|
|
|
private:
|
|
EventHandlerImplementation delegate_;
|
|
};
|
|
|
|
|
|
#endif // BIN_EVENTHANDLER_H_
|