Home
Objective Caml
ocaml@conference.jabber.ru
Вторник, 14 июля 2009< ^ >
f[x] установил(а) тему: Камло -- http://caml.inria.fr | chatlog -- http://chatlogs.jabber.ru/ocaml@conference.jabber.ru/ (старые -- http://ocaml.seajelly.org/ ) | верблюды грязи не боятся!
Конфигурация комнаты

GMT+4
[00:18:18] sceptic вышел(а) из комнаты
[01:19:52] kerneltrap вышел(а) из комнаты
[08:13:28] gds вышел(а) из комнаты
[08:21:15] john вошёл(а) в комнату
[09:03:55] gds вошёл(а) в комнату
[09:57:35] daapp вошёл(а) в комнату
[10:22:53] Typhon вошёл(а) в комнату
[10:51:23] Typhon вышел(а) из комнаты: Replaced by new connection
[10:51:24] Typhon вошёл(а) в комнату
[11:09:37] ygrek вошёл(а) в комнату
[11:17:02] f[x] вошёл(а) в комнату
[11:20:03] <f[x]> это несложно - я использовал существующий враппер
[11:20:17] <f[x]> насчёт srvany не в курсе
[11:22:37] <f[x]> хотя нет, есть камловские врапперы, но я его не использовал, адаптировал сишный код
[11:22:51] <f[x]> вот этот
/*
SVNService
Written by Magnus Norddahl
This code is in the public domain and is provided as-is without
warranty of any kind, either expressed or implied, including but not
limited to killing your cat or burning down your PC.
*/
[11:24:30] <f[x]> если хочешь, могу скинуть
[11:25:38] <gds> да вот думаю, стоит ли ввязываться: надо будет предоставлять интерфейс к install/uninstall, надо будет обрабатывать запросы к службе, тогда как всё ограничено по сути запуском и остановкой процесса (остановку можно даже некультурную).
[11:26:50] <f[x]> install/uninstall встроены в exeшник сервиса - клчами комстроки, а вся обработка сводится к вызову caml'евой функции которая по описсанным в рассылке причинам ставит булевый флаг
[11:29:12] <gds> ага, понял. В общем, сделаем так: пока челу это дело не горит, а как будет гореть, попробую по-простому решить. Если не проканает, обращусь.
Просто думал, что есть уже совсем готовое средство для реализации такого дела.
[11:31:05] <f[x]> ок
[11:36:32] gds вышел(а) из комнаты: Replaced by new connection
[11:36:33] gds вошёл(а) в комнату
[11:38:02] sceptic вошёл(а) в комнату
[12:57:17] ygrek вышел(а) из комнаты
[12:57:24] ygrek вошёл(а) в комнату
[12:59:30] john вышел(а) из комнаты
[13:24:18] ygrek вышел(а) из комнаты: Replaced by new connection
[13:24:20] ygrek вошёл(а) в комнату
[13:26:12] daapp вышел(а) из комнаты: Replaced by new connection
[13:26:15] daapp вошёл(а) в комнату
[13:32:27] john вошёл(а) в комнату
[13:56:31] gds вышел(а) из комнаты: Replaced by new connection
[13:56:32] gds вошёл(а) в комнату
[14:34:29] daapp вышел(а) из комнаты
[15:03:08] <gds> винда, nginx, fastcgi:
$ ocamlfind ocamlc -package netcgi2 -linkpkg counter.ml counter_fcgi.ml
$ ./camlprog.exe
c:\Documents and Settings\gds\fcgi\camlprog.exe (FCGI) listening on port 1200.
html'ки выдаёт, но, в том числе и:
500 — Internal Server Error
Cause of the error:Unix.Unix_error(_, "single_write", "")
[15:12:58] <f[x]> а если расписать unix_error, что там конкретно?
[15:17:14] <gds> не догнал.
вот с сильными обрезаниями:
CAMLprim value unix_single_write(value fd, value buf, value vofs, value vlen)
{
if (Descr_kind_val(fd) == KIND_SOCKET) {
ret = send(s, iobuf, numbytes, 0);
if (ret == SOCKET_ERROR) err = WSAGetLastError();
} else {
HANDLE h = Handle_val(fd);
if (! WriteFile(h, iobuf, numbytes, &numwritten, NULL))
err = GetLastError();
}
if (err) {
win32_maperr(err);
uerror("single_write", Nothing);
}
[15:17:30] <gds> пример по умолчанию вешается на localhost:1200, то и указал в nginx.
[15:17:52] <gds> но есть подозрение, что uerror -- именно тот, который генерит ошибку.
[15:18:15] <gds> по логике, не обязательно прям таки single_ под виндой делать.
[15:20:05] <f[x]> let with_unix_error f x =
begin try
f x;
with
| Unix_error (err,func,param) -> Printf.eprintf "Unix_error %s %s(%s)" (error_message err) func param
end
[15:46:53] <gds> Unix_error unknown error #-11870520 single_write()
[15:49:48] <gds> кстати, браузер показывает, что получил такой исходник:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html>
<head>
<title>counter</title>
[...]
</html>
Content-Type: text/html; charset="iso-8859-1"
Cache-control: no-cache
Pragma: no-cache
Expires: Tue, 14 Jul 2009 11:44:47 +0000
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html>
<head>
<title>counter</title>
[...]
</html>
Unix_error unknown error #-11870520 single_write()
//
то, что всё отдаётся дважды, удивляет.
[15:50:18] <f[x]> мда
[15:54:05] <f[x]> екзешник нативный?
[15:54:17] <f[x]> посмотреть дашь?
[15:56:07] <gds> скомпилировал нативно, теперь
Unix_error Invalid argument single_write()
[15:56:52] <gds> и всё воспроизводится (байткод даёт одно, натив другое).
[15:57:08] <gds> чо за чертовщина...
[15:57:37] <gds> native code .exe ещё нужен?
[15:57:41] <f[x]> угу
[15:59:48] Mon вышел(а) из комнаты
[16:00:00] Mon вошёл(а) в комнату
[16:02:11] <gds> ага, в первый раз даёт
Unix_error Invalid argument single_write()
, а в следующие разы (без перезапуска .exe) --
Unix_error Unknown error single_write()
http://gdsfh.dyndns.org:8111/gds/counter_fcgi_nat.zip
[16:03:23] Typhon вышел(а) из комнаты
[16:03:55] Typhon вошёл(а) в комнату
[16:07:06] <gds> если чо, в nginx.conf (nginx-0.8.5) указано:
location /kva {
root kva;
fastcgi_pass 127.0.0.1:1200;
include fastcgi_params;
}
[16:10:26] <f[x]> повторяется
[16:10:55] sceptic вышел(а) из комнаты
[16:13:14] <gds> в смысле, описанное мной поведение?
[16:13:59] sceptic вошёл(а) в комнату
[16:14:47] <f[x]> угу, полностью
[16:18:04] <f[x]> может это срабатывает?
let single_write fd buf ofs len =
if ofs < 0 || len < 0 || ofs > String.length buf - len
then invalid_arg "Unix.single_write"
else unsafe_single_write fd buf ofs len
[16:18:17] <f[x]> а в байткоде print_backtrace показывает откуда вылезло?
[16:22:12] <gds> Unix_error unknown error #-11870520 single_write(), bt=Raised by primitive operation at unknown location
Called from file "netchannels.ml", line 1287, characters 14-50
Called from file "netchannels.ml", line 1195, characters 17-49
Called from file "netchannels.ml", line 1380, characters 6-19
Re-raised at file "netchannels.ml", line 1385, characters 9-12
Called from file "netcgi_fcgi.ml", line 676, characters 14-43
Re-raised at file "netcgi_fcgi.ml", line 679, characters 36-37
Called from file "netcgi_common.ml", line 1973, characters 47-56
Called from file "counter_fcgi.ml", line 9, characters 5-10
[16:24:04] <gds> method output buf pos len =
if closed_out then self # complain_closed();
try
let n = Unix.single_write fd_out buf pos len in (* <--- *)
pos_out <- pos_out + n;
n
with
Unix.Unix_error(Unix.EINTR,_,_) ->
self # output buf pos len
| Unix.Unix_error(Unix.EAGAIN,_,_)
| Unix.Unix_error(Unix.EWOULDBLOCK,_,_) ->
if blocking then (
let _ = Netsys.restarting_select [] [fd] [] (-1.0) in
self # output buf pos len
)
else
0
[16:24:34] <gds> опять этот дебилизм с двойной линковкой либ, что ли.
[16:32:25] <f[x]> не понятно, видно что send вызывается таки два раза с одним и тем же контентом, а почему не понятно, символов нету - грустно
[16:35:49] <gds> может в with натыкать отладку, или бестолку?
[16:36:15] <gds> то есть, предполагаю, что вызывается тот же самый self#output
[16:38:23] <f[x]> хз
[16:38:26] <f[x]> очень странно
[17:32:51] gds вышел(а) из комнаты
[18:46:22] gds вошёл(а) в комнату
[18:59:11] Typhon вышел(а) из комнаты
[19:19:53] john вышел(а) из комнаты: Replaced by new connection
[19:19:54] john вошёл(а) в комнату
[20:08:22] f[x] вышел(а) из комнаты: Computer went to sleep
[22:06:00] kerneltrap вошёл(а) в комнату
[23:28:31] DiGiTAL_CuRSe вошёл(а) в комнату
[23:44:08] DiGiTAL_CuRSe вышел(а) из комнаты
[23:44:17] DiGiTAL_CuRSe вошёл(а) в комнату
[23:52:25] DiGiTAL_CuRSe вышел(а) из комнаты
[23:52:36] DiGiTAL_CuRSe вошёл(а) в комнату
[23:56:14] ygrek вышел(а) из комнаты
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!