|
|
ru.nethack- RU.NETHACK ------------------------------------------------------------------- From : Alexandr Pristenski 2:5020/400 28 Sep 2003 23:11:44 To : Dmitry Lipovoi Subject : Re: remote shell win32 -------------------------------------------------------------------------------- Dmitry Lipovoi <Dmitry.Lipovoi@p17.f231.n5000.z2.fidonet.org> пишет в сообщении:1064486327@p17.f231.n5000.z2.ftn... > Hi Alexandr. > В linux'е это делается так: > > Есть функция dup2(int h1, int h1) -- если кратко, дублировать file > descriptor h1 в h2. Если открыть соединение, а потом выполнить > > dup2(s, 0); > dup2(s, 1); > > то послеующие вызовы печати на экран, чения с клавиатуры будут > перенаправляться на сокет s. Так как в *nix-like OS файловые дескрипторы > потомков наследуются, то можно сделать стандартную связку fork+exec для > пораждения потомка (первый параметр exec должын быть равен "/usr/bin/sh", ну > или другому шеллу). > > В windows, я полагаю, процесс должен быть схожим. Только что-то не получается... По идее этот кусок кода должен всё, что идёт скажем с приконнектившегося телнета эхом отправлять обратно: if(listen(listen_socket, 5) == SOCKET_ERROR) exit(-1); while((server_socket = accept(listen_socket, (struct sockaddr *)temp_addr, (int *)&accepted_len)) != INVALID_SOCKET) { dup2(server_socket, 0); dup2(server_socket, 1); for(;;) { key = getc(stdin); putc(key, stdout); } } А вот не биндит он server_socket к STDIN/STDOUT и всё тут. dup2 возвращает "-1", т.е. error... Вообще под виндой можно ли так: dup2(socket, 0)? Под линухом всё пашет отлично... WTBR, Alexandr S. Pristenski. --- ifmail v.2.15dev5 * Origin: Demos online service (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.nethack/6577a5d0d2c1.html, оценка из 5, голосов 10
|