LinuxQuestions.org
Download your favorite Linux distribution at LQ ISO.
Go Back   LinuxQuestions.org > Forums > Non-*NIX Forums > Programming
User Name
Password
Programming This forum is for all programming questions.
The question does not have to be directly related to Linux and any language is fair game.

Notices

Reply
 
Search this Thread
Old 02-29-2012, 04:31 AM   #1
golden_boy615
Member
 
Registered: Dec 2008
Distribution: Ubuntu Fedora
Posts: 442

Rep: Reputation: 17
How to prevent lighttpd and fastCGI to share persistent sockets for different session


I want to have persistent socket to send and receive data to a program written in C language on embedded linux on arm9 processor (this program has no problem in making and serving socket I tested it with other applications)
this is my code:
PHP Code:
<?php
SESSION_START
();*
error_reporting(0);
@
ini_set(‘display_errors’0);

if(!
$_SESSION['randa']){
$_SESSION['randa'] = rand(1,99999);
}
echo 
$_SESSION['randa'] .'<br>';

$fp_a pfsockopen("192.168.1.32",7777$errno$errstr30);

$outa "D-1;".$_SESSION['randa'].';';
fwrite($fp_a$outa);
$out_putt fread($fp_a2048);
echo 
$out_putt 

?>
<meta http-equiv="refresh" content="2;url=?">
as you see it reloads every 2 seconds. My goal is to prevent closing socket due to the PHP script exit and each session has its own persistent opened socket because of some reasons in my project,The above code works fine with apache and every session have their own persistent socket with no problem, the problem rises when I put this script in lighttpd with fastCGI enabled.
lighttpd opens persistent socket and everything goes fine for one session but if more that one session (web pages on different PCs) open, lighttpd share this persistent socket for all of them and does not open new socket for different sessions and all of them read each others data and sends their own data to one opened socket .
I used even this script too:
PHP Code:
<?php
session_start
();*
if(!
$_SESSION['views']){
$_SESSION['views'] = pfsockopen("192.168.1.32",7777$errno$errstr30);
$fp $_SESSION['views'] ;
stream_set_blocking $fp ) ;
}else{
$fp $_SESSION['views'] ;
}
$sread=fread$_SESSION['views'], 1024);
if(
$sread==false and $sread!=''){
$_SESSION['views'] = pfsockopen("192.168.1.32",7777$errno$errstr30);
$fp $_SESSION['views'] ;
stream_set_blocking $fp ) ;
}
if (
$fp) {
$out "D-1;";
fwrite($fp$out);
$out_put $sread.fread($fp2048);
echo 
$out_put 
}
?>
<meta http-equiv="refresh" content="2;url=?">
to put persistent socket in session variable to prevent using same socket for different sessions but nothing changed and everything goes the same as first script did (one socket for all sessions ).
my config files are:
Quote:
cat /etc/php.ini | grep ^[^\;]
[PHP]
engine = On
short_open_tag = On
asp_tags = Off
precision = 14
y2k_compliance = On
output_buffering = 4096
zlib.output_compression = On
zlib.output_compression_level = 5
implicit_flush = Off
unserialize_callback_func =
serialize_precision = 100
allow_call_time_pass_reference = Off
safe_mode = Off
safe_mode_gid = Off
safe_mode_include_dir =
safe_mode_exec_dir =
safe_mode_allowed_env_vars = PHP_
safe_mode_protected_env_vars = LD_LIBRARY_PATH
disable_functions =
disable_classes =
expose_php = On
max_execution_time = 30
max_input_time = 60
memory_limit = 16M
error_reporting = E_ALL & ~E_DEPRECATED
display_errors = Off
display_startup_errors = Off
log_errors = On
log_errors_max_len = 1024
ignore_repeated_errors = Off
ignore_repeated_source = Off
report_memleaks = On
track_errors = Off
html_errors = Off
variables_order = "GPCS"
request_order = "GP"
register_globals = Off
register_long_arrays = Off
register_argc_argv = Off
auto_globals_jit = On
post_max_size = 8M
magic_quotes_gpc = Off
magic_quotes_runtime = Off
magic_quotes_sybase = Off
auto_prepend_file =
auto_append_file =
default_mimetype = "text/html"
doc_root =
user_dir =
enable_dl = Off
file_uploads = On
upload_max_filesize = 2M
max_file_uploads = 20
allow_url_fopen = On
allow_url_include = Off
default_socket_timeout = 60
[Date]
[filter]
[iconv]
[intl]
[sqlite]
[sqlite3]
[Pcre]
[Pdo]
[Pdo_mysql]
pdo_mysql.cache_size = 2000
pdo_mysql.default_socket=
[Phar]
[Syslog]
define_syslog_variables = Off
[mail function]
SMTP = localhost
smtp_port = 25
mail.add_x_header = On
[SQL]
sql.safe_mode = Off
[ODBC]
odbc.allow_persistent = On
odbc.check_persistent = On
odbc.max_persistent = -1
odbc.max_links = -1
odbc.defaultlrl = 4096
odbc.defaultbinmode = 1
[Interbase]
ibase.allow_persistent = 1
ibase.max_persistent = -1
ibase.max_links = -1
ibase.timestampformat = "%Y-%m-%d %H:%M:%S"
ibase.dateformat = "%Y-%m-%d"
ibase.timeformat = "%H:%M:%S"
[MySQL]
mysql.allow_local_infile = On
mysql.allow_persistent = On
mysql.cache_size = 2000
mysql.max_persistent = -1
mysql.max_links = -1
mysql.default_port =
mysql.default_socket =
mysql.default_host =
mysql.default_user =
mysql.default_password =
mysql.connect_timeout = 60
mysql.trace_mode = Off
[MySQLi]
mysqli.max_persistent = -1
mysqli.allow_persistent = On
mysqli.max_links = -1
mysqli.cache_size = 2000
mysqli.default_port = 3306
mysqli.default_socket =
mysqli.default_host =
mysqli.default_user =
mysqli.default_pw =
mysqli.reconnect = Off
[mysqlnd]
mysqlnd.collect_statistics = On
mysqlnd.collect_memory_statistics = Off
[OCI8]
[PostgresSQL]
pgsql.allow_persistent = On
pgsql.auto_reset_persistent = Off
pgsql.max_persistent = -1
pgsql.max_links = -1
pgsql.ignore_notice = 0
pgsql.log_notice = 0
[Sybase-CT]
sybct.allow_persistent = On
sybct.max_persistent = -1
sybct.max_links = -1
sybct.min_server_severity = 10
sybct.min_client_severity = 10
[bcmath]
bcmath.scale = 0
[browscap]
[Session]
session.save_handler = files
session.use_cookies = 1
session.use_only_cookies = 1
session.name = PHPSESSID
session.auto_start = 0
session.cookie_lifetime = 0
session.cookie_path = /
session.cookie_domain =
session.cookie_httponly =
session.serialize_handler = php
session.gc_probability = 1
session.gc_divisor = 1000
session.gc_maxlifetime = 1440
session.bug_compat_42 = Off
session.bug_compat_warn = Off
session.referer_check =
session.entropy_length = 0
session.entropy_file =
session.cache_limiter = nocache
session.cache_expire = 180
session.use_trans_sid = 0
session.hash_function = 0
session.hash_bits_per_character = 5
url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry"
[MSSQL]
mssql.allow_persistent = On
mssql.max_persistent = -1
mssql.max_links = -1
mssql.min_error_severity = 10
mssql.min_message_severity = 10
mssql.compatability_mode = Off
mssql.secure_connection = Off
[Assertion]
[COM]
[mbstring]
[gd]
[exif]
[Tidy]
tidy.clean_output = Off
[soap]
soap.wsdl_cache_enabled=1
soap.wsdl_cache_dir="/tmp"
soap.wsdl_cache_ttl=86400
soap.wsdl_cache_limit = 5
[sysvshm]
[ldap]
ldap.max_links = -1
[mcrypt]
[dba]
and
Quote:
cat /etc/lighttpd.conf | grep ^[^#]
server.modules = (
"mod_fastcgi",
"mod_access",
"mod_setenv",
"mod_cgi",
"mod_accesslog" )
server.document-root = "/var/www"
server.errorlog = "/var/log/lighttpd.error.log"
index-file.names = ( "index.php", "index.html",
"index.htm", "default.htm" )
mimetype.assign = (
".pdf" => "application/pdf",
".sig" => "application/pgp-signature",
".spl" => "application/futuresplash",
".class" => "application/octet-stream",
".ps" => "application/postscript",
".torrent" => "application/x-bittorrent",
".dvi" => "application/x-dvi",
".gz" => "application/x-gzip",
".pac" => "application/x-ns-proxy-autoconfig",
".swf" => "application/x-shockwave-flash",
".tar.gz" => "application/x-tgz",
".tgz" => "application/x-tgz",
".tar" => "application/x-tar",
".zip" => "application/zip",
".mp3" => "audio/mpeg",
".m3u" => "audio/x-mpegurl",
".wma" => "audio/x-ms-wma",
".wax" => "audio/x-ms-wax",
".ogg" => "application/ogg",
".wav" => "audio/x-wav",
".gif" => "image/gif",
".jpg" => "image/jpeg",
".jpeg" => "image/jpeg",
".png" => "image/png",
".xbm" => "image/x-xbitmap",
".xpm" => "image/x-xpixmap",
".xwd" => "image/x-xwindowdump",
".css" => "text/css",
".html" => "text/html",
".htm" => "text/html",
".js" => "text/javascript",
".asc" => "text/plain",
".c" => "text/plain",
".cpp" => "text/plain",
".log" => "text/plain",
".conf" => "text/plain",
".text" => "text/plain",
".txt" => "text/plain",
".dtd" => "text/xml",
".xml" => "text/xml",
".mpeg" => "video/mpeg",
".mpg" => "video/mpeg",
".mov" => "video/quicktime",
".qt" => "video/quicktime",
".avi" => "video/x-msvideo",
".asf" => "video/x-ms-asf",
".asx" => "video/x-ms-asf",
".wmv" => "video/x-ms-wmv",
".bz2" => "application/x-bzip",
".tbz" => "application/x-bzip-compressed-tar",
".tar.bz2" => "application/x-bzip-compressed-tar"
)
accesslog.filename = "/var/log/access.log"
debug.log-request-handling = "enable"
url.access-deny = ( "~", ".inc" )
$HTTP["url"] =~ "\.pdf$" {
server.range-requests = "disable"
}
static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" )
fastcgi.server = ( ".php" => ((
"bin-path" => "/usr/bin/php-cgi",
"socket" => "/tmp/php.socket"
)))

cgi.assign = ( ".cgi" => "" )
alias.url = ( "/cgi-bin" => "/usr/www/cgi-bin" )
server.upload-dirs=( "/usr/www" )
server.max-request-size = 1000
How can I prevent this problem? which configuration should I change for what to enable one socket for one session ??
 
Old 03-01-2012, 12:11 PM   #2
lisle2011
Member
 
Registered: Mar 2011
Location: Surrey B.C. Canada (Metro Vancouver)
Distribution: Slackware 2.6.33.4-smp
Posts: 179
Blog Entries: 1

Rep: Reputation: 25
Socket programming

Sockets are widely misunderstood and yet serve us well. Here is a snippet from a web page.

Quote:
But if you plan to reuse your socket for further transfers, you need to realize that there is no EOT on a socket. I repeat: if a socket send or recv returns after handling 0 bytes, the connection has been broken. If the connection has not been broken, you may wait on a recv forever, because the socket will not tell you that there’s nothing more to read (for now). Now if you think about that a bit, you’ll come to realize a fundamental truth of sockets: messages must either be fixed length (yuck), or be delimited (shrug), or indicate how long they are (much better), or end by shutting down the connection. The choice is entirely yours, (but some ways are righter than others).
The pages address is here:web page

If the socket has no EOT and tries to handle what amounts to nothing, it closes. So perhaps what you are trying to do needs a rethink.
 
Old 03-02-2012, 01:11 AM   #3
golden_boy615
Member
 
Registered: Dec 2008
Distribution: Ubuntu Fedora
Posts: 442

Original Poster
Rep: Reputation: 17
did you read what I want your answer perhaps is for any body else, I did not ask anything about closing or time of closing of socket my socket does not close I do not want to be close and I know how to close it and I know how to find out it is closed or not please read the question correct because e question with no answer in a forum has more chance to find an answer than a question with incorrect or worst non related answer like yours.
thank you any way
 
  


Reply


Thread Tools Search this Thread
Search this Thread:

Advanced Search

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is Off
HTML code is Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
difficulty installing lighttpd+php5+fastcgi on Ubuntu 10.04 walterbyrd Linux - Software 4 05-13-2010 10:03 AM
Slackware 13 64-bit + php 5.3.0 + lighttpd 1.4.23 -> fastcgi problems lordbone Linux - Software 2 10-14-2009 11:00 AM
Lighttpd + Fastcgi + ruby How? chutsu Linux - Server 0 08-17-2009 05:12 PM
C(sockets):how to implement persistent and pipeline supermyself Programming 0 06-09-2005 12:42 PM
PHP5 FastCGI session errors (Permission Denied) neocookie Linux - General 2 06-07-2005 12:26 PM


All times are GMT -5. The time now is 11:08 AM.

Main Menu
My LQ
Write for LQ
LinuxQuestions.org is looking for people interested in writing Editorials, Articles, Reviews, and more. If you'd like to contribute content, let us know.
Main Menu
Syndicate
RSS1  Latest Threads
RSS1  LQ News
Twitter: @linuxquestions
identi.ca: @linuxquestions
Facebook: linuxquestions Google+: linuxquestions
Open Source Consulting | Domain Registration